MTタグ検索結果ページをphpで作る

MovableType インターネット
Movable Typeの検索用ファイル「mt-search.cgi」を隠すため...

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」を新規作成。

00908.gif

00909.gif

ファイル名は何でも良い。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> &gt; <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>

(補足:当サイトでは別手段に移行のため使用中止)

posted on May 3, 2017
-

related entries