MTOS(MT5) 検索ページのカスタマイズ

| コメント(0) | トラックバック(0)

MTOS(MT5)でウェブサイトを設定し、ウェブページや子ブログを、それぞれ違うデザインで作った場合、デフォルトのサイト内検索の結果表示が、少々情け無い状態になってしまう場合があります。

ページ数が多くなると、フンドシみたいに長いページの表示になってしまうし、ページ毎のデザインや画像がうまく反映されなかったり。

というわけで、画像やデザインは無視して、ヒットしたページのタイトルと、テキストのみを表示してみようと、試行錯誤してみました。

いじる場所

今回いじった場所は、システムテンプレートの[検索結果]。

1.デザインの修正

まずは、[検索結果]テンプレートの<Div>タグとClass名を整理したり追加して、サイトのデザインを反映。

このとき、下記の部分だけは、JavaScriptがページ数を拾いに行ってる場所のようでしたので変更しませんでした。

<div id="search-results">
   <span id="current-page" class="hidden"><$mt:CurrentPage$></span>

 

2.検索結果の表示内容

検索した結果の内容表示には、デフォルトで、[ブログ記事の概要]モジュールがincludeされてますが、これが情けなくなっちゃう原因なので、新しいモジュールを作ります。

[検索結果]のなかでincludeされている[ブログ記事の概要]モジュールの代わりに、新しいテンプレートモジュールを作成し[ブログ記事の概要]モジュールに差し換えてincludeしてみました。

タイトルとテキストのみを表示する

新しく作ったテンプレートモジュールでは、タイトルとテキストのみ表示したいので、とりあえず、下記のようなコードを書いてみました。

<div>
  <div><a href="<$mt:EntryPermalink$>" rel="bookmark"><$mt:EntryTitle$></a><mt:If name="display_blog_name"> - <$mt:EntryBlogName$></mt:If></div>
  <mt:If tag="EntryBody">
    <p><$mt:EntryBody remove_html="1" strip_linefeeds="1" trim="1" trim_to="200"$></p>
  </mt:If>
</div>窶謀

<mt:EntryBody>のモディファイアは、左から順番に処理されるので、

  1. HTMLタグの削除
  2. 改行コードの削除
  3. 余分な余白の削除
  4. 最初から200文字のみ抽出

といった設定でうまく行くと思ったのですが・・・。

trim="1" で削除してくれる余白は、EntryBody の前後の余白だけで、記事の中にある余白は削除してくれない様子。

ウェブページなどの場合、記事として登録したHTMLの可読性をキープするために、やたらとタブやスペースが本文中につめこまれてしまっていますので、ちょっと困った事に。

trim_to="200" は、本文中のタブやスペースも一文字として拾ってしまっているようなので、200文字表示したつもりが、実際には50文字程度しか表示されないページがあったりして、なんだか、気持ちよく収まってくれません。

正規表現で余白を削除する

試行錯誤した結果、regex_replace というモディファイアを使って、正規表現で余白を削除してみることにしました。

<$mt:EntryBody remove_html="1" regex_replace="/\s/g","" trim_to="200"$>

regex_replace="正規表現","置き換える文字" という書式ですね。

ちなみに、'\s'は、空白文字(スペース、タブ、改行コード、ラインフィード)、'g'が「マッチするものを全て見つける」オプション。

スペース、タブ、改行コード、ラインフィードを全部削除してしまうので、strip_linefeeds と trim は個別にやる必要はありません。

これで、本文中の無駄な余白を全部消せますので、最後に、trim_toで必要な文字数分を抜き出して、狙い通りの結果を手に入れることができました。

トラックバック(0)

トラックバックURL:

コメントする

ARCHIVES