2017-03-09 5 views
1

Algolia InstantSearch jsライブラリとPHPクライアントを使って、InstantSearch urlSyncで作成したクエリ文字列をPHPライブラリの検索メソッドに渡したいとします。これを行う便利な方法はありますか?または、ライブラリが自分自身が期待するパラメータにクエリ文字列を変換する必要がありますか?Algoliaでは、urlSyncによって作成されたクエリ文字列をPHPクライアントに渡す方法はありますか?

例えば、私は、文字列を持っている:

?q=&hPP=1000&idx=myindex&p=0&dFR%5Bcolor%5D%5B0%5D=orange&is_v=1

理想的には私がしたい

$client = new \AlgoliaSearch\Client("x", "x"); 
$index = $client->initIndex($_GET['idx']); 
parse_str($_SERVER['QUERY_STRING'], $params); 
$res = $index->search('', $params); 

が、そうすること渡すのparamsで予想外の特性があること、エラーがスローされます。

答えて

5

Algoliaクライアントを使用して、バックエンドでインスタント検索URLを再利用することはできません。私はあなたがSEOの目的のためにこれを求めていると仮定します。これは間違いなく有効な点です。

これは現時点で実行可能な唯一の言語はJavaScriptです。 実際、このロジックは、instantsearch.jsという基礎となるライブラリ(algoliasearch-helper-js)から抽出できます。

  • 状態
  • が以前(非推奨とすぐに)文書化されていないを使用して、最後にsetState
  • を使用して1を取得しgetQuery method
でその状態を設定し new helper instance
  • を作成し取得するために使用getStateFromQueryString

    実際にこのロジックをフロントエンドに追加し、このクエリをURLエンコードし、バックエンドでデコードするカスタムパラメータに設定することができます。これはかなり醜いですが、それはうまくいくかもしれません(しかし、最大URI長には収まらないかもしれません)。 searchがあなたのinstantsearch.jsインスタンスです -

    フロントエンドでは、あなたは単にsearch.helperを使用することができ、URLから状態を抽出し、新しいヘルパーに状態を設定するプロセスを通過する必要がないだろう。

  • +0

    ありがとうございます。はい、目標はSEOです。 jsの準備が整う前に、キャッシュされた結果を提供したい。 syncUrlで使用されている名前がフィルタパラメータと互換性があり、これらがすべてのクライアントで一貫していれば素晴らしいでしょう(すでに存在しているかもしれませんが、これまでのところjsとPHPは使用していません)。しかしそれは単なる示唆です。今のところ、渡されたURLパラメータをPHPにマップするだけで、私たちは受け取るものを厳密に制御し、サーバー上でjsを実行するのは不当です。再度、感謝します! –

    +1

    これは間違いなく良い提案であり、内部的に議論されています。これを変更すると数ヶ月前になる可能性は低いため、このソリューションはその間に利用可能な最良のソリューションになる可能性があります。しかし明らかに、サポートされているすべてのプラットフォームでこの経験を統一するために全力を尽くしています。 :) – Jerska

    関連する問題