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__