読者です 読者をやめる 読者になる 読者になる

気づいたら、ここだった

考えているようで、考えなしに生きてるので、気づいたらこんなことになてってた私のブログ

まもなく出るという a-blog cms 2.0 を使ってみた件(後編)

a-blog cms

昨日の続き。a-blog cms Advent Calendar 2013 - Adventar への寄稿。
今日はちょっとマニアックな方面も含めて。新機能の気になる所をチョイス。

ゴミ箱

地味に助かる機能だと思います。
エントリーを削除した時にの動作が、以前はそのまま闇に葬られていましたが、今回からはゴミ箱に移動するようになり、必要なら復活させる事ができます。

テキストユニットに秘密の隠しフィールドが追加されている・・・

あまり知られていない、そしてどこにも説明が出ていない謎の機能ってやつがたいていのソフトにはあるもんだけど、これもそんなやつだと思われる。

だけど、実は場合によってはかなり使えるはず。
たぶんだれも説明しない・・・かなと思うので、今のうちにざっくり書いておくよ。

まずテーマフォルダの system の中からこのファイルをみつける

/system/admin/entry/unit.html

これをコピーして自分の使ってるテーマの同じディレクトリに置く(途中のディレクトリも無ければ作る)

/{my_prod}/admin/entry/unit.html

で、コピーしたそのファイルを開いて BEGIN text ってところを探します。
こんなとこね

  <!-- BEGIN text -->
  <textarea type="text" name="text_text_{id}" rows="10" style="width:100%;" class="entryFormTextarea {diff}">{text}[escape|escvars]</textarea>

ここに text_text_{id} という名前のテキストエリアがありますが、これがテキストユニットの入力ボックスになっています。この名前を text_text_{id}[] に変更します。
そして、これをコピーして2つにしましょう。2つめのテキストエリアの中には {text2} と数字の2を変数名につけます。
最終的にはこんな感じ。

  <!-- BEGIN text -->
  <textarea type="text" name="text_text_{id}[]" rows="10" style="width:100%;" class="entryFormTextarea {diff}">{text}[escape|escvars]</textarea>
  <textarea type="text" name="text_text_{id}[]" rows="10" style="width:100%;" class="entryFormTextarea {diff}">{text2}[escape|escvars]</textarea>

そうすると、テキストユニットひとつで2つの入力ボックスが表示されるようになり、ちゃんと保存もしてくれるようになります。

・・・で、これが何に使えるかというと、1つめは日本語、2つめは英語・・・というように一つのエントリーで複数の言語に対応させることが可能になるんですね。

もちろん表示側も変更しないといけません。
日本語表示はそのままでOKなので英語版を用意する方法。

まずテーマの継承機能を使って、英語版のテーマを作ります。
テーマディレクトリの中に、"en@今使っているテーマ名" のようなディレクトリを作ります。
例えば今使っているテーマディレクトリが my_prod であれば en@my_prod というディレクトリにします。
作ったらその中に include というディレクトリを作成し、/system/include/unit.html をコピーして配置します。
コピーした unit.html を開いてみると、中に {text} という表記がいくつも書いてあると思います。これらを全部 {text2} に変更します。

これで英語表示用のテンプレートはできあがり。
テーマの継承というのは @マークのついたテーマ名をつけると、そのテーマ内に存在しないファイルが参照される時に自動的に@以下のテーマ内にある同名のファイルを参照してくれるという機能。なので、今回は unit.html ひとつだけ作れば他のファイルが無くてもOK。

あとは英語表示用のURLを用意して、そこに表示させる設定です。

ログインして管理ページに行き、「エイリアス」をクリック。続いて「エイリアスの作成」をクリックます。(これで同じコンテンツを別のURLでも表示する設定になります)
名前は適当にわかる名前で、コードネームがURLの一部になるので、en と入れましょう。ドメインは現在のドメインです。

続いてルールの作成です。「ルール」メニューから「ルールの作成」でルール名等にわかりやすい名前を付けます。
そして、エイリアスID (aid) のところに先ほど作成したエイリアスのIDを入力します。(初めて作ったエイリアスなら 1 のはずです)
保存してルールの一覧を表示すると、今作ったルールに「コンフィグ」というボタンがあるので、それをクリック。
その画面から「テーマ設定」で先ほど作った en@〜 のテーマを選んで保存!

これで今まで通りのURLで日本語、今までのURL+/en/ のURLで英語が表示されるようになります。

どう?できたかな?

同じ方法で 3、 4と増やせるので、多言語対応できますよ。あ、でも入力フォーム部分はタブ切換えとか、ちょっと工夫が必要ですね。

モジュールIDの指定で複数IDをカンマ区切りで指定可能

今まで、例えばトップページに「お知らせ」カテゴリーの新着だけ表示しようと思った場合、そのカテゴリを指定したモジュールIDを作成して表示していたのですが、そこにもうひとつ別のカテゴリも含めて表示したい・・・「お知らせ」と「プレスリリース」の二つのカテゴリーから新着を表示したい・・・といったことができませんでした。
実はこれで困った事が実際ありました。子カテゴリなら含める事ができるので、むりやりお知らせ系は「情報>お知らせ」と「情報>プレスリリース」のような階層構造にしたりして回避してました・・・
今回、モジュールIDにカンマ区切りで複数のIDを指定できるようになったということで、複数のカテゴリを表示できるようになったようです。
これで無理に階層を作ってめんどうな構造にする必要は無くなります。

テンプレートで条件分岐が使えるようになった

a-blog cmsのテンプレートには「値が無い場合は表示しない」という程度のことは記述できたが、いわゆるIF文のような条件分岐構文はなかった。

そういえば昨日、私はテンプレートにプログラムが書けないことを利点としてあげているが、その反面簡単な分岐くらい書けた方がいいんじゃないかという意見もあるわけだ。
それがほしいばかりにIfElseモジュールなんかも出ていた。そしてお世話になった人も多いと思う。案外必要になるシーンは多い。

そう、いつでも理想と現実は違うからね。

そして、今回は公式にそんなIF文が書けるようになったとのこと。これは知っておくといざというとき便利ですよ。
構文もシンプルな感じ。
例えばグローバル変数でブログURLとベースURLが同じ場合にYES違えばNOと表示する場合。

<!-- BEGIN_IF [%{BLOG_URL}/eq/%{BASE_URL}] -->
YES
<!-- ELSE -->
NO
<!-- END_IF -->

カスタムフィールドグループで最大数を制限できるように変更

これも前から欲しかった。
もう固定数で作ってしまうか、どうしても必要な場合はいちいち自前でjs書くかと思っていたのだけど、標準に入ってくれたので今後は手間要らず。
やり方は簡単、今まで通りのカスタムフィールドグループに、

<input type="hidden" class="item-max" value="4" />

を追加するだけでOKみたい。

まとめ

以上〜。ひとまず使ってみた感じでした!
(というか、多言語対応の解説になったが)

あと地味にunderscore.jsの標準添付とか(ぼくはsugar派だけど)まだ紹介しきれないいろいろありますが、今回のバージョンアップも期待以上に機能アップしていると感じます。

そしてこれ以外に承認機能がついたエンタープライズ版もあるそうですからね(まだ触った事無いからわかんないんだけどもw)

みなさん、ぜひ使ってみましょう!