kazumich.log

a-blog cmsのカスタムフィールドを使った条件分岐

この記事は公開日より年以上経過しています

情報が古くなっている可能性がありますのでご注意ください。

SOY CMSのカスタムフィールドを使った条件分岐(1) | ウェビンブログというエントリーを読んで、a-blog cmsではどう書けばできるのかを書いてみる事にしました。

前回は、a-blog cmsではタッチモジュールで条件を設定という事で、タッチモジュールで表示エリアの設定をする事を紹介しましたが、今回はエントリーのカスタムフィールドでオススメというチェックボックスを追加し、新着エントリ一リスト上に [オススメ] という表示ができるようにする方法を書いてみようと思います。



まずは、カスタムフィールドですが、a-blog cmsサポートチュートリアルに以下のような情報が書かれていますので、こちらもお読み下さい。


まず、以下のファイルをご利用のテーマにコピーします。今回の例では、company1 になります。

/themes/system/admin/entry/edit.html

そして、72行目と224行目のあたりに

<tr>
 <th>オススメ</th>
 <td>
 <input type="checkbox" name="sample[]" value="osusume"{sample:checked#osusume} />
  <input type="hidden" name="field[]" value="sample" />
 </td>
 </tr>

を追加します。これでエントリーにチェックボックスが表示されるようになります。name="sample[]" の[]は複数同じ名前sampleが登録できるようにするための書き方で、{sample:checked#osusume} については、{name:checked#value} と書く事でチェックがある際には checked="checked" という表示になります。


次に、以下のテンプレートの中にある Entry_Headline のモジュール [新着] の表示のあたりに

/themes/company1/top.html

を追加してみて下さい。

<!-- BEGIN sample:touch#osusume -->[オススメ]<!-- END sample:touch#osusume -->

これで、[オススメ]が表示できるようになります。

<!-- BEGIN カスタムフィールド名:touch#カスタムフィールド値 -->
カスタムフィールド名がカスタムフィールド値の時に表示されます
<!-- END カスタムフィールド名:touch#カスタムフィールド値 -->

という事で、カスタムフィールド名がカスタムフィールド値の時に表示されるような設定が可能となっています。


今回、触ったファイルは

  • company1/admin/entry/edit.html (追加)
  • company1/top.html

で、この2つのファイルをZIPしてアップしておきました。これくらいは簡単に修正できるかと思いますが、これをアップロードするだけでも確認する事ができます。

a-blog cms では、PHPのプログラムを書くという作業は一切無く、今回のような記述のみでサイトをカスタマイズする事ができるようになっております。


関連エントリー

更新

Recommendation

a-blog cms でカスタムフィールドをグローバル変数化する方法

a-blog cms 1.6 をリリースして玄人好みの改善として一番にあげられる機能は「グローバル変数を追加する」という部分じゃないだろうか。基本的には php を触る事なくカスタマイズできるというのが a-blog cms の一番の良さではあるので、どうしてもやりたい!って時に参考にして下さい。 config.server.php を修正する システム上、Hook機能を利用についてはオフになっていますので、この設定を変更します。初期は 0 になっていますので、1 に設定します。 define('HOOK_ENABLE', 1); Hook.php について Hook.php を利用する事により、a-blog cms の各処理にオリジナルのプログラムを組み込む事ができるようになります。通常のインストール時には、今回触るファイルは存在していません。omake/php/ACMS/User/Hook.php のファイルにありますので、これをコピーして利用します。処理としては、以下の8つが用意されています。 GETモジュール処理前 / beforeGetFire GETモジュール処理後 / afterGetFire POSTモジュール処理前 / beforePostFire POSTモジュール処理後 / afterPostFire ビルド前(GETモジュール解決前)/ beforeBuild ビルド後(GETモジュール解決後)/ afterBuild 処理の一番最後のシャットダウン時 / beforeShutdown グローバル変数の拡張 / extendsGlobalVars 一番下のものが、今回紹介する部分になります。 extendsGlobalVars を以下のように設定すると、EID が設定されている(詳細ページ)の時に、全てのカスタムフィールドをグローバル変数化する事ができます。 /** * グローバル変数の拡張 * * @param array $globalVars */ public function extendsGlobalVars($globalVars) { if( EID ){ $Field = loadEntryField(EID); $globalVars->setField('FIELD_TEMPLATE',$Field->get('template') ); } } 上記のように書く事で、エントリーのカスタムフィールド「template」に入ったデータを グローバル変数 %{FIELD_TEMPLATE} と編集する事ができるようになります。 参考までに、エントリーのカスタムフィールド「template」の登録用のソースは以下のようなHTMLになります。これを設置先のテーマの /admin/entry/field.html に記述下さい。 template1 template2 template3 この活用というところでは、Entry_Body 等の中くらいに以下のようなインクルードが書けるようになります。これができると嬉しい人っているんじゃないかと思います。いかがでしょうか?

次の a-blog cms 1.6.1 には物件情報のサンプルを

a-blog cms のいいトコロとしては、やっぱりテンプレートを手書きするカスタムフィールドだと思う。その良さが分かりやすいように、最初にインストールするテーマにサンプルとして不動産の物件情報を入れてみる事にした。 一覧ページでは、地図に複数の物件をマッピングしている Google Maps と、下にカスタムフィールドを表示させるエントリーの一覧ページとした。カスタムフィールド検索についても、最寄り駅・家賃の範囲検索・フリーワード検索ができるようにしている。 詳細ページは普通にカスタムフィールドをレイアウトし、誰が追加しても同様なレイアウトになるようにしている。より多くの情報を掲載したい場合には、通常のユニット機能を利用して下に情報を追記が可能となっています。 そして、詳細ページと編集ページを比べてみてもらうと、a-blog cms のカスタムフィールドの良さが分かるんじゃないでしょうか。通常の詳細ページと同じレイアウトで編集用の管理ページを用意する事ができます。 このコンテンツを作るのには、phpのコードを書く事も無ければ、Google Maps の JavaScript すら書かないでも作る事ができます。同様な感じで、求人情報サイトなんかも作れそうですね。ぜひ、a-blog cms を使ってみて下さい。 ※ このコンテンツは、来週リリース予定の 1.6.1 に用意しています。

a-blog cms のテンプレートの評価順について

a-blog cms のテンプレートの評価順について書かれているトコが無かったので、まずはココに書いてみる事にします。テンプレートは右のような感じだったとし、一覧を表示する際について書いてみます。 1.5.2までと1.6.0からで違いますので、まずは古い方からです。 1.5.2 までの場合 これまでのバージョン1.5.2までは、グローバル変数>インクルード>内側のモジュールから外側のモジュールの順で動作していました。ですから、ページに貼られているモジュールは全て実行され、タッチモジュールを実行した際に非表示にされるような動きになります。 index.html に書かれているグローバル変数を編集します。この際には順番というのは特に無く一緒に編集される感じです。%{BLOG_NAME}, %{CCD}, %{EID} footer.html をインクルードします。 sub.html をインクルードします。 header.html をインクルードする前に、グローバル変数 %{NOW_DATE} を編集します。 Entry_Body を実行します。 Touch_Entry を実行します。 Entry_Headline を実行します。その際には {url} , {title} の順に編集します。 Category_Field を実行します。 Touch_Index を実行します。 Blog_Field を実行します。 1.6.0 以降の場合 今回の改良で、タッチモジュールを先行評価するように改善され、上記の 5. Entry_Body の処理を実行しない事ができるようになりました。 index.html に書かれているグローバル変数を編集します。この際には順番というのは特に無く一緒に編集される感じです。%{BLOG_NAME}, %{CCD}, %{EID} footer.html をインクルードします。 sub.html をインクルードします。 header.html をインクルードする前に、グローバル変数 %{NOW_DATE} を編集します。 Touch_Entry を実行します。 Touch_Index を実行します。 Entry_Headline を実行します。その際には {url} , {title} の順に編集します。 Category_Field を実行します。 Blog_Field を実行します。 こう書いてみると、この場合には Entry_Body モジュール1つ分の実行をしない分だけ高速になるって事なんだが、実際の利用では効果を発揮するハズです。

Contact

お問い合わせはこちら