6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-12-22

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

最後にをテンプレートいれていけば、必要な情報が取得できます!!

完成!!

ああ、かぶってる。。。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?