Movable Typeの検索用ファイル「mt-search.cgi」を隠すため、表示URLを.htaccessで書き換える手段がある。
例えば、タグ「北海道」で検索した結果を20件表示するページのURL。
https://kaoriz.net/mt/mt-search.cgi?limit=20&tag=北海道
.htaccessで以下のように書き換える。
https://kaoriz.net/tag/北海道
この考え方をヒントに、phpファイルで表示するようにしてみた。
https://kaoriz.net/list.php?tag=北海道
肝は拡張子が「php」であるところ。つまり、可変データ対応が出来るphpページに検索結果ページを取り込む。iframe は使わないけれど、iframe 枠に検索結果を表示するようなイメージ。尚、当サイト内のキーワード検索はMTのシステムではなくGoogleさんに頼って貰うことにしてあるので、今回は「タグ検索」についてのみ対処。
以下、自分メモ。
1. list.php 作成
インデックステンプレートで検索表示用のページ「list.php」を新規作成。
ファイル名は何でも良い。tag.php にすると「tag.php?~&tag=北海道」でタグタグ煩いので、一覧を表示するということで list.php にしてみただけ。tag.php にしたいのなら、「tag.php?~&word=~」というように?の後を好きに変えれば良い。
テンプレートの中身は使用しているテーマによって記述が違うと思うが、「ウェブページ」あたりからコピーペーストして改変するのが一番簡単。本文表示タグ(<mt:PageBody>と<mt:PageMore>)を削り、以下の記述にする。尚、アドレス部分について、当サイトでは諸事情で絶対パス(https://~)にしている。
<?php // [ list.php ] if(isset($_GET['tag'])) { $tagname = $_GET['tag']; include("http://kaoriz.net/mt/mt-search.cgi?limit=20&tag=$tagname"); } ?>
例で「北海道」としている値は「$tagname」で引き渡す。
複数のブログからタグ検索結果をまとめて表示するのなら、&tagの前あたりに「&IncludeBlogs=all」や「&IncludeBlogs=1,2,3」というように付け加える。
mt-search.cgi?limit=20&IncludeBlogs=1,2,3&tag=$tagname
テンプレートの中身全体はこんな感じ。(コピーペースト可。URLをyour.addressにしてある)
<mt:SetVarBlock name="page_title">タグ検索</mt:SetVarBlock> <!DOCTYPE html> <html lang="<mt:BlogLanguage>" itemscope itemtype="http://schema.org/Webpage"> <head> <meta charset="<mt:PublishCharset>"> <title><mt:Var name="page_title"> - <mt:BlogName encode_html="1"></title> <mt:Include module="HTMLヘッダー"> </head> <body> <header role="banner"> <mt:Include module="バナーヘッダー"> <mt:Include module="ナビゲーション"> </header> <div class="content"> <ul class="breadcrumb" itemprop="breadcrumb"> <li><a href="<mt:BlogURL encode_html="1">">ホーム</a></li> <li><mt:Var name="page_title"></li> </ul> <div role="main"> <section class="page"> <h2 itemprop="name" class="title"><mt:Var name="page_title"></h2> <div> <?php // [ list.php ] if(isset($_GET['tag'])) { $tagname = $_GET['tag']; include("http://your.address/mt/mt-search.cgi?limit=20&tag=$tagname"); } ?> </div> </section> </div> <div class="related"> <mt:WidgetSet name="関連コンテンツ (インデックス)"> </div> </div> <footer role="contentinfo"> <mt:Include module="バナーフッター"> </footer> <script src="<mt:StaticWebPath encode_html="1">jquery/jquery.min.js"></script> <script src="<mt:Link template="javascript_theme" encode_html="1">"></script> </body> </html>
2. システムテンプレートの「検索結果」を改変
list.php内の <?php ~ ?> 部分となる。<mt:Include module="HTMLヘッダー">などは不要で、テンプレートの記述はこれだけ。(コピーペースト可)
<mt:SetVarTemplate id="search_results" name="search_results"> <mt:SearchResults> <mt:SearchResultsHeader> <p><mt:SearchString> : 全<mt:SearchResultCount>件<mt:IfMoreResults>(最新記事から20件まで表示)</mt:IfMoreResults></p> <dl> </mt:SearchResultsHeader> <dt><a href="<mt:EntryPermalink>"><mt:TopLevelParent><mt:EntryCategory></mt:TopLevelParent> > <mt:EntryTitle remove_html="1"></a></dt>
<dd><mt:EntryBody remove_html="1" trim_to="40">...</dd> <mt:SearchResultsFooter> </dl> <mt:IfMoreResults><hr> <p>これ以上表示出来ません。サイト内検索もお試し下さい。</p></mt:IfMoreResults> </mt:SearchResultsFooter> </mt:SearchResults> </mt:SetVarTemplate> <mt:Var name="search_results">
検索結果が20件以上ある場合でも、続きのリンクは作成していない。続きのリンクで元URLがばれてしまうからだ。表示が20件では足りないかな? 50件くらいでもいいかも。
3. タグ検索結果ページへのリンクを記述
アーカイブテンプレート「記事」などの表示したい箇所に、以下を記述。(コピーペースト可)
<mt:EntryIfTagged><p><mt:EntryTags glue=", "><a href="http://your.address/list.php?tag=<mt:TagName encode_url="1">" class="tag"><mt:TagName></a></mt:EntryTags></p></mt:EntryIfTagged>
(補足:当サイトでは別手段に移行のため使用中止)