airplantz

flexibleSearch でbodyをn文字だけ抽出

0

デフォルト検索では重いとのことで、「flexibleSearch」を使って、検索画面を作りました。

<dl>
<dt><a href="<$MTEntryPermalink$>" title="<$MTEntryTitle$>"></a></dt>
<dd><$MTEntryBody words="100" blog_id="1"$>...<a href="<$mt:EntryPermalink$>">[続きを読む]</a></dd>
</dl>

上記のようにヒットしたサイトの本文を100文字表示させていただのですが、flexibleSearch の設定でn文字だけ抽出するようにしたいのですが、どういうふうに書けばよいか、いろいろやってみたのですが、できずに悩んでいます。

jsonは、以下で書いています。

<mt:Unless name="compress" regex_replace="/^\s*\n/gm","">{"items":[
<mt:entries include_blogs="3" lastn="0">
<mt:setvarBlock name="item{title}"><mt:entryTitle></mt:setvarBlock>
<mt:setvarBlock name="item{url}"><mt:entryPermalink></mt:setvarBlock>
<mt:setvarBlock name="item{body}"><mt:entryBody remove_html="1" regex_replace="/\n|\t| | /g",""></mt:setvarBlock>
<mt:setvarBlock name="item{more}"><mt:entryMore remove_html="1" regex_replace="/\n|\t| | /g",""></mt:setvarBlock>
<mt:setvarBlock name="item{tag}">,<mt:entryTags glue=","><mt:tagName regex_replace="/ | /g","%20"></mt:entryTags>,</mt:setvarBlock>
<mt:setvarBlock name="item{category}"><mt:EntryCategories glue=","><mt:CategoryLabel></mt:EntryCategories></mt:setvarBlock>
<mt:var name="item" to_json="1">,
</mt:entries>
<mt:pages lastn="0">
<mt:setvarBlock name="item{title}"><mt:pageTitle></mt:setvarBlock>
<mt:setvarBlock name="item{url}"><mt:pagePermalink></mt:setvarBlock>
<mt:setvarBlock name="item{body}"><mt:pageBody remove_html="1" regex_replace="/\n|\t| | /g",""></mt:setvarBlock>
<mt:setvarBlock name="item{more}"><mt:pageMore remove_html="1" regex_replace="/\n|\t| | ",""></mt:setvarBlock>
<mt:setvarBlock name="item{tag}">,<mt:pageTags glue=","><mt:tagName regex_replace="/ | /g","%20"></mt:pageTags>,</mt:setvarBlock>
<mt:setvarBlock name="item{more}"><mt:PageFolder><mt:FolderLabel></mt:PageFolder></mt:setvarBlock>
<mt:var name="item" to_json="1"><mt:unless __last__>,</mt:unless __last__>
</mt:pages>
]}</mt:Unless>

お分かりになる方がいらっしゃいましたら、よろしくお願いいたします。

返信(7)

| 返信する
  • こんにちは。
    flexibleSearch.js でご希望の dl 要素で、本文の100文字を表示させて、それ以上は ... をつけるサンプルを書いて見ました。

    https://gist.github.com/tinybeans/06112793ebf6023302b7

    前提としてREADMEに載っている使い方の説明どおりに設定しているとします。

    https://github.com/tinybeans/jq-plugin-flexibleSearch/blob/master/README.md

    上記 gist のサンプルコードの modifyResultItemHTML というオプションが100文字にトリミングしている部分です。

    modifyResultItemHTML というオプションはこのREADMEには載っていないのですが(すみません・・・)、このオプションに関数を指定して、その関数に渡される引数の文字列を加工して return すれば、検索結果をカスタマイズすることができます。

    この当たりは、本当は mustache.js のテンプレート機能をもっと使えればいいのですが、その当たりは今後の課題としたいと思います。

  • tinybeansさん、ありがとうございます!!
    出来ました!!

  • 申し訳ありません。
    もうひとつ教えていただけますか。

    同じページ内で、別のブログ検索をそれぞれ検索させたいのですが、できますか。

    Aの検索は 

    <mt:entries include_blogs="1.3" lastn="0">

    Bの検索は 
    <mt:entries include_blogs="3" lastn="0">

    のようにしたいのですが、可能なのでしょうか?

  • airplantz さん、うまくいって良かったです。

    >同じページ内で、別のブログ検索をそれぞれ検索させたいのですが、できますか。

    複数のJSONを用意して、それを切り替えて検索することができます。
    例えば、Aの検索用のJSONを search.json、Bの検索用のJSONを search2.json と作っておいて、それをラ時をボタンなどで切り替えて検索する方法です。

    https://gist.github.com/tinybeans/e979bfd4968d5a2c8b24

    このサンプルにあるように searchDataPath オプションをオブジェクトの形で指定して、検索パラメータの dataId でそのオブジェクトのキーを指定して切り替えるようにします。

    ここでは radio ボタンで切り替えてますが、ページによって切り替えたり、ユーザーのなんらかのアクションを拾って hidden で dataId パラメータを渡すなども考えられます。

    なお、このような検索をする場合は、検索フォームは自分で書いた方がいいですので、その場合は searchFormCreation: false, を指定した方が良いでしょう。

  • tinybeansさん、詳しく教えて頂いて、ありがとうございます。

    radioボタンでの切り替え、入れてみます。
    ありがとうございます!

  • tinybeansさん、切り替えの件ではお世話になりました。

    別の質問でなのですが、ウェブサイト全体から検索でヒットしないようにするワードの設定はできるのでしょうか?

  • 3/4の質問は解決いたしました。
    ありがとうございました。

返信する


カテゴリグループ

OpenID対応しています OpenIDについて