We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 6158
    • 224 Posts
    こんばんは。


    FlexSearchForm をテストしています。

    "CONFIGURE" > "MAIN SNIPPET SETUP OPTIONS" およびソースを読むと、
    &searchStyle を ’partial’ にすることで、SQL の LIKE ’%’ を使った検索が
    可能となっていますので、試してみました。


    (1) Default Template 中の FlexSearchForm を変更する。

    [!FlexSearchForm? &FSF_showResults=`0` &FSF_landing=`8` &searchStyle=`partial`!]
    SQL が partial になっていない。


    (2) $searchStyle を $FSF_searchStyle としてみる。

    [!FlexSearchForm? &FSF_showResults=`0` &FSF_landing=`8` &FSF_searchStyle=`partial`!]
    SQL が partial になっていない。


    (3) $searchStyle の backquotation (`) を消してみる。

    [!FlexSearchForm? &FSF_showResults=`0` &FSF_landing=`8` &searchStyle=partial!]
    SQL が partial になっていない。


    (4) $FSF_searchStyle として backquotation (`) を消してみる。

    [!FlexSearchForm? &FSF_showResults=`0` &FSF_landing=`8` &FSF_searchStyle=partial!]
    SQL が partial になっていない。


    (5) snippet "FlexSearchForm" 自体の $searchStyle を partial に変更する。
    SQL が partial になった。


    以上の通り、snippet variable として $searchStyle=`partial` を指定しても
    反映されていない状況です。何か間違っているのでしょうか?


    正しい書き方をご存知の方がおられたら、お教え願えますか。
      • 6158
      • 224 Posts
      ソースを読んだ結果、snippet variable として &searchStyle=`partial` を明
      記しても、FlexSearchForm 内部では partial として扱われない事が分かりま
      した。
      [!FlexSearchForm? &FSF_showResults=`0` &FSF_landing=`8` &searchStyle=`partial`!]
      と書いた場合、document.parser.class.inc.php : evalSnippet() においてス
      ニペットが処理されます。

      (1) 上記オプションは extract() によってスニペットで扱われる変数に変換される、
      (2) eval() でスニペットが評価される。

      (1) で $searchStyle = "partial" となりますが、(2) の最初で
      $searchStyle = "relevance" と上書きされてしまいます。


      partial で検索を行いたい時は、ソースをいちいち変更しなければならないな
      んて不便なので、snippet variable で変更できるように、FlexSearchForm の
      $searchStyle 初期化の行を以下のように変更しました。
      $searchStyle = (isset ($searchStyle) && !empty ($searchStyle)) ? $searchStyle : 'relevance';

      これで取り敢えずは、snippet variable の設定が反映されるようになります。

      但し、core と FlexSearchForm の作者らは、何かしらの意図を持って
      snippet variable から変数を上書きされないようにしていると思うのですが、
      誰かお分かりになりますか?