phpで作るmovabletypeの検索システム

  • 2
    いいね
  • 0
    コメント

この記事は 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) {
(略)
}
?>

最後に<?php echo $変数名?>をテンプレートいれていけば、必要な情報が取得できます!!

完成!!

ああ、かぶってる。。。