以前にMovable Typeでphpを使用する記事を投稿しましたが、phpを使って簡単な記事検索の実装を試してみます。
サンプルコード
まずは検索フォームですが、今回は記事タイトルを文字列で検索する想定で行ってみます。
<form action="search.php" method="get"> <input type="search" name="s"> <button>検索</button> </form>
次に検索結果ページです。
出力ファイル名をsearch.phpとした上で、記事情報と検索文字列の取得を行います。
<?php
<MTSetVarBlock name="total"><MTBlogEntryCount></MTSetVarBlock>
// 記事情報を変数に格納
$articles = array(
<mt:Entries lastn="$total">
array(
'title' => '<MTEntryTitle encode_php="q">',
'category' => '<MTEntryCategories glue=", "><MTCategoryLabel encode_php="q"></MTEntryCategories>'
)<MTUnless name="__last__">,</MTUnless>
</MTEntries>
);
// 検索で使用する文字列を取得
$search_query = isset($_GET['s']) ? $_GET['s'] : false;
$safe_search_query = htmlspecialchars($search_query, ENT_QUOTES, 'UTF-8');
?>
検索結果一覧を表示する部分です。
<?php
foreach ($articles as $article) {
// 検索文字列が空または検索文字列を含む記事の場合は出力
if(!$search_query || strpos($article['title'], $search_query) !== false) {
echo '<h1>' . htmlspecialchars($article['title']) . '</h1>';
}
}
?>
これで文字を入力せずに検索した場合、すべての記事が表示されます。
<h1>記事C</h1> <h1>記事B</h1> <h1>記事A</h1>
「A」という文字で検索すると、記事Aのみが表示されます。
<h1>記事A</h1
コメントが承認されるまで時間がかかります。