ラック
Home > CMS > 記事 > 2014年7月 > サイト内検索の実装

サイト内検索の実装

カテゴリ: MODx

一段落したのでサイト内検索の実装をしてみました。

デフォルトだと検索フォームの直下に検索結果を表示するので、これを任意の場所に表示するようにするために参考サイトの「検索結果一覧を任意のブロックに出力する」にあるように、「output=1」のパラメータと[+as.inputForm+]を配置。

…あとは別ページで表示させるために[+as.results+]を置く専用のリソースを作成、っと。

そのためにはパラメータで「AS_landing=`x`」(xは検索結果表示用に使うリソースのID)を指定すれば良い…と思いきや、これは情報が古くて「landingPage=`x`」というパラメータに変更されているのでこっちを使って実装。

あとは先の通り検索結果用のリソースを作成して、パラメータを色々弄って実装。検索フォームはヘッダーに欲しかったのでヘッダーのチャンクに記述。

●ヘッダーの検索フォーム(チャンクにしてあり、どのページでも同じ表示)

	
[!ajaxSearch
&Advanced = `allwords` //検索語全てを含むページを表示
&ajaxSearch=`0` //ajaxモードを使用しない
&hideMenu = `0` //「メニューに表示」のリソースのみ検索対象にする
&landingPage = `xx` //検索結果表示用のリソースを指定 //AS_landingというパラメータ名から変更されている
&output = `1` //出力場所を検索フォーム直下ではなく、別の場所を指定できるようにするパラメータ
!]
[+as.inputForm+] <!-- 検索フォーム表示 -->
	

landingPageの指定はxx。ここにリソースIDを入れてね。

 

●検索結果表示用リソースの中身(上記のxxの本文部分)

	
[+as.inputForm+] <!-- 検索フォーム表示 -->
<hr />
[+as.results+] <!-- 検索結果表示 -->
	

これで検索フォームができました。既存のスニペットが使えるとサクッと機能が実装できるので楽ですねぇ。などと余裕をかましてページをリロードしたらエラー吐き出されましたよ?!

…仕方ないのでエラー文を見ると…「assets\snippets\ajaxSearch\classes\ajaxSearch.class.inc.php の78行目のset_time_limit関数がセキュリティの都合上実行できませんでした(超意訳)。」…なんですと?

レンタルサーバですし権限の都合とか何かか、php.iniで何か設定されているのか…。ふぅむ…。

…ソースコードや関数自体の動きを見るに、動作に直接影響があるようなものではなさそう。このスニペット、結構処理に負荷がかかるブツらしいので自分で実行時間に制限をかけているのか?

ということで、コメントアウトしちゃいましょう(ぉ

	
//        set_time_limit($asCfg->cfg['timeLimit']);
        $asCfg->cfg['timeLimit'];
	

これでどうだ、っと…動いた!ということで実装完了。ちょいとトラブりましたがまあ、楽ですね。

 

あ、そうだ。AjaxSearchの話題ついでにちょっと前の話題貼っておきましょう。

古いやつはアップデートしてね、というお知らせ。

タグ: スニペット, サイト内検索

 



関連する記事一覧