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>のモディファイアは、左から順番に処理されるので、
- HTMLタグの削除
- 改行コードの削除
- 余分な余白の削除
- 最初から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で必要な文字数分を抜き出して、狙い通りの結果を手に入れることができました。
コメントする