この記事は Movable Type Advent Calendar 2016 – Adventar の 22日目の記事です。
アドベントカレンダーとか初めてだったので、ものすごい緊張して、手が震えまくりながらネタを考える毎日でした。
考えたネタとしては、プラグイン、運用、営業ネタ、IoTネタとかシモネタとか色々考えましたが
やっぱりすぐにニーズがありそうで、使ってもらえるテンプレートネタにしてみました。
そして、書き終わった気が付いたのですが、
6日目とかぶってますね。。
ごめんなさい。。。
##導入の背景
MTのサーバから複数台の公開サーバへのデプロイがありつつ、検索機能を動かしたい。
DataAPIでのアクセスでも実装は可能であったかも知れませんが、DBへの負荷、
実はPowerCMSだったりして、カスタムオブジェクトも検索対象でなので慣れないDataAPI(その頃は)よりも
phpを介した方が早いということで、このアプローチにいたりました。
こうすれば、検索の負荷はフロントに分散できるし、DB落ちても検索機能はとまりません。
##実装したもの
検索対象をphpの配列化したもの(インデックステンプレート)
検索機能(インデックステンプレート)
###検索対象をphpの配列化する
通常のエントリーとカスタムオブジェクトを配列にいれて、loopさせます。
<?php
$entryData = array();
<mt:entries lastn="0">
$array = array(
"title" => "<mt:entrytitle escape="html">",
"body" => "<mt:entrybody escape="html">",
"link" => "<mt:entrylink>",
"date" => "<$mt:EntryDate format="%Y年%m月%d日 %H時%M分%S秒"$>",
"categorylabels" => array(
<mt:entrycategories>"<mt:categorylabel>",</mt:entrycategories>
),
略(DataAPIの部分)
);
array_push($entryData, $array);
</mt:entries>
array_multisort(array_column($entryData, 'recdate'), SORT_DESC, $entryData);
###検索機能部分
完全にphpのお話なので詳細は省略!!
要はforeachで配列から必要な情報を取得します。
include 'entry_db.php';
$title = "一覧";
$searchWord = @$_GET["search"];
if ($searchWord) {
$title = $searchWord . "の検索結果一覧";
$searchData = array();
foreach ($entryData as $entry) {
(略)
}
?>
最後にをテンプレートいれていけば、必要な情報が取得できます!!
完成!!
ああ、かぶってる。。。