昨日よりCraft CMSで運用を開始した当サイトに検索機能を追加しました。
検索テンプレートについてはドキュメントにある通りなので簡単でした。ページ分割も{% paginate %}を使うことで実現できました。
- Searching | Craft 3 Documentation
- Search Form | Craft 3 Documentation
- {% paginate %} | Craft 3 Documentation
ちなみに、全ページ数はpageInfo.totalPages、現在のページ数はpageInfo.currentPageで取得できました。(as pageInfo, pageEntriesと記述した場合)また、テンプレートに過去の仕様に沿った記述をすると管理画面の「非推奨エラー」に表示されるので、内容を確認して修正を行いました。
Craft CMSにクエリストリングが渡らない
ハマったのはcraft.app.request.getParam('q')で検索クエリが取得できないこと。test.phpにphpinfo()を書いてtest.php?q=testとすると$_SERVER['QUERY_STRING']にq=testが入るのですが、Craft CMSではどうしても$_SERVER['QUERY_STRING']が空になりました。
色々悩みコードを読むなどしたのですが、index.phpの冒頭にvar_dump($_SERVER['QUERY_STRING'])を書いてみると、この時点で既に値が空。このことからNginxのrewriteルールが悪いと判断できました。そこで、Nginxの設定をKenzie Campbellさんのkenzie/craft.confを参考に設定したところ、無事クエリストリングがCraft CMSに渡るようになり解決しました。