以前に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
コメントが承認されるまで時間がかかります。