a-blog cmsのオリジナルGETモジュールを作ってみた
案件でa-blog cmsのオリジナルモジュールを作る機会があったので初チャレンジしました。
カスタムフィールドのあるエントリーから、お問い合わせなどの別ページに移動した際に、遷移前のエントリーのカスタムフィールドの値を参照し利用するというもの。エントリーのカスタムフィールドで設定したものを、別ページでも読み込めるというのは今後の用途も多そうです。
ちなみにa-blog cmsにはGETやPOSTのモジュール開発環境が揃っていますので、オリジナルモジュールが開発出来る様になれば、かなり制作の幅も増えそうです。
今回の件は、全ての値をGETで渡してjsで処理すば何とかなるのかもしれませんが、メアドなどは困るしスマートでもないので、GETはエントリーIDだけにしています。POSTモジュールも使えばエントリーIDをGETしなくても出来るのかもしれませんが、そこまではまだ勉強中で分かりませんでした。。。
例)エントリーから2つのカスタムフィールド
{fieldA}、{fieldB}の値を、お問い合わせ(contact.html)に引き継ぐ場合。
まずは、エントリーにカスタムフィールドを作り、エントリーのテンプレートにエントリーIDを引数にしたリンクを作成します。
<!-- エントリーのテンプレート --> <a href="contact.html?contactID=%{EID}">お問い合わせはこちら</a>
次にオリジナルのGETモジュール(Contactid.php)です。
「/php/ACMS/GET/Ideasource/Contactid.php」にモジュールファイルを作りました。
今回は該当するエントリーのカスタムフィールド名と値を取得します。記載はしていないけど、取得した値を適所処理すれば、望んだ形の値に加工する事も可能ですね。
<?php require_once ACMS_LIB_DIR.'GET.php'; // /php/ACMS/GET/Ideasource/Contactid.php class ACMS_GET_Ideasource_Contactid extends ACMS_GET{ function get(){ if(isset($_GET['id'])){ //GETの値を取得 $contactID = $_GET['contactID']; // Templateクラス $Tpl = new Template($this->tpl, new ACMS_Corrector()); //引数からDBをselect $DB = DB::singleton(dsn()); // SQLクラス $SQL = SQL::newSelect('field'); // 対象の列を設定 //エントリーID $SQL->addWhereOpr('field_eid', $contactID, '='); //カスタムフィールドID $SQL->addWhereIn('field_key', array('fieldA','fieldB')); // SQLを組み立てる $q = $SQL->get(dsn()); // クエリーを実行して結果を取得 $all = $DB->query($q, 'all'); // 取得したデータをentry:loopとしてテンプレートに追加 foreach ( $all as $row ) { $Tpl->add('contactidLoop:loop', $row); } // テンプレートを処理済みの文字列としてreturn return $Tpl->get(); } } } ?>
次にお問い合わせのテンプレート(contact.html)です。
こちらに{fieldA}と{fieldB}のカスタムフィールド名と値が、ループで出てきます。
使い道に合わせて処理してください。
<!-- BEGIN_MODULE Ideasource_Contactid --> <!-- BEGIN contactidLoop:loop --> フィールド名:{field_key} 内容:{field_value}__bR__ <!-- END contactidLoop:loop --> <!-- END_MODULE Ideasource_Contactid -->
結果(fieldAの値がhogehoge、fieldBの値がfugafuga、の場合)
フィールド名:fieldA 内容:hogehoge__bR__ フィールド名:fieldB 内容:fugafuga__bR__