ブログトップ
スクリプトモジュールブロックについて2
2009年11月19日
前回、スクリプトモジュールブロックの使用設定を行いました。
今回は記事に特定の文字がある場合は表示するという関数を作成していきましょう。
始めにスクリプトモジュールブロック用の関数を記述するPHPファイルを用意します。
今回は説明用にsoycms_search.phpにしました。
(関数名はsoycms_search)
このファイルに下記のスクリプトを記述して保存します。
<?php
function soycms_search(){
//検索したい文字列が入る。
$query = @$_GET["q"];
//ブログに使われているラベルIDを取得する。
$blogLabelId = $_GET["label"];
//検索結果を格納する変数
$soycms_search_result = array();
//ここでDAO_Queryを呼び出している。
$sql = new SOY2DAO_Query();
$binds = array(
":label_id" => $blogLabelId,
":now" => time()
);
$sql->prefix = "select";
$sql->table = "Entry inner join EntryLabel on(Entry.id = EntryLabel.entry_id)";
$sql->distinct = true;
$sql->order = "udate desc";
$sql->sql = "id,id,alias,title,content,more,cdate,display_order ";
$sql->where = "label_id = :label_id ";
$sql->where .= "AND Entry.isPublished = 1 ";
$sql->where .= "AND (openPeriodEnd >= :now AND openPeriodStart < :now) ";
$where = array();
$queries = explode(" ",$query);
foreach($queries as $key => $word){
$where[] = "Entry.title LIKE :query" . $key
. " or Entry.content LIKE :query" . $key
. " or Entry.custom_field LIKE :query" . $key
. " or Entry.more LIKE :query" . $key;
$binds[":query" . $key] = "%" . $word . "%";
}
$sql->where .= "AND ((".implode(") or (",$where)."))";
$dao = SOY2DAOFactory::create("cms.EntryDAO");
$res = $dao->executeQuery($sql, $binds);
foreach($res as $key => $row){
$obj = @$dao->getObject($row);//SOY2::cast("Entry",(object)$row);
$soycms_search_result[] = $obj;
}
//検索結果を返す
return $soycms_search_result;
}
?>
詳しい説明は省略しますが、
ここには、後述するブログページに設置した検索フォームから入力された値とブログページの設定で使用するラベルに選んだラベルを取得し、
その二つの値を利用して、DBファイルから該当する記事を全て返すというロジックが書かれています。
スクリプトモジュールブロックに利用するロジックの作成は以上になります。
次回は今回作成したファイルをスクリプトモジュールブロックに設定してみましょう。