HOME>情報備忘録>MovableTypeの検索のシステムテンプレートをPHPに置き換える

MovableTypeの検索のシステムテンプレートをPHPに置き換える

MovableTypeではシステムテンプレート上でPHPはインクルードできない。 できないってかPHPとして動いてはくれない。

サイトのベースをPHPで作成していると、不便なのでphpからmt-search.cgiに file_get_contents()でアクセスして取得した内容を表示させるようにします。

テーマの設定はこんな感じ。

theme.yaml

  1. index:
  2.     search_php:
  3.         label: SearchPHP
  4.         outfile: search.php
  5.         rebuild_me: 1
  6.  
  7. system:
  8.     search_results:
  9.         description_label: Displays results of a search.
  10.         label: Search Results
  11.  

インデックステンプレートとしてsearch_php.mtmlを作成しsearch.phpとして書き出されるようにします。 search.phpではGETパラメーターを解析してmt-search.cgiにアクセスします。

search.php

  1. <?php
  2. require_once('header.php');
  3.  
  4. $path_to_cgi = 'http://www.kantenna.com/cgi-bin/mt504/mt-search.cgi';
  5. $blog_id     = $_GET['blog_id'];
  6. $tag         = urlencode($_GET['tag']);
  7. $limit       = isset($_GET['limit']) ? '&limit=' . $_GET['limit'] : '';
  8.  
  9. $query = sprintf('blog_id=%s&tag=%s%s',
  10.                 $blog_id,
  11.                 $tag,
  12.                 $limit
  13.                 );
  14.  
  15. $stream = file_get_contents($path_to_cgi . '?' . $query);
  16. echo $stream;
  17.  
  18. require_once('footer.php');
  19. ?>

まぁこれだとタグしか対応できないので、foreachで回した方がよいですね。 文章の検索はgoogelさんにお任せなので頭になかったです。

search_results.mtmlには検索結果の表示部分だけを記述すればOKです。

ただしタグの場合のリンクなど、<$mt:TagSearchLink$>は使えないので 下記のように変更してやる必要があります。

HTML

  1. <a href="<$mt:BlogURL$>search.php?blog_id=<$MTBlogID$>&tag=<$mt:TagName$>&limit=<MTSearchMaxResults>"><$mt:TagName$></a>
  2.  

ちなみにMT使いの間ではmt-search.cgiは使わないのがセオリーっぽいですw

投稿日 2011年2月11日 01:55
カテゴリ 設定
タグ MovableType
トラックバック URL http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1215

コメント

だいぶ前の記事ですが、拝見しました。
「タグしか対応できないので、foreachで回した方がよい」
というのはどのようにしたらいいでしょうか。

コメントする
Name
Email Address
URL