現在のセットアップでは、サービスを通じてjsonを出力するビューを公開しています。
ビューは次のように呼び出すことができます:_http://domain.com/api/books.json
_。
また、参照コンテンツタイプ「作成者」にフィルターを公開しました。私は[〜#〜]ない[〜#〜] _context filters
_を使用して、通常のFilters
を使用して、その特定のフィルターをユーザーに公開しました。フィルターにナイス引数名_author_nid
_を付ける方法。
したがって、これを_http://domain.com/api/books.json?author_nid=38
_と呼ぶことができます。そして、これはそのnidを持つ著者のすべての本を返します。
しかし、著者38と著者32の両方の本のリストを取得する方法がわかりません。
私が試したこと:
_http://domain.com/api/books.json?author_nid=38,32
_
_http://domain.com/api/books.json?author_nid=38+32
_
_http://domain.com/api/books.json?author_nid[]=38,32
_
_http://domain.com/api/books.json?author_nid[]=38+32
_
_http://domain.com/api/books.json?author_nid[0]=38&author_nid[1]=32
_
これは現在サポートされていないような気がします。私は正しいですか?もしそうなら、私の選択肢は何ですか? 10〜15個のフィルターを公開するので、引数に名前を付けたいと思います(一部はオプション、その他は必須)。コンテキストフィルターを使用して、次のようにフィルタリングします。_args[]=2&args[]=43,23&args[]=44
_は、あまり読みやすく、維持できません。
milkovsky で提案されているように?author_nid[]=38&author_nid[]=32
を使用しても機能しない場合は、コンテキストフィルターの使用を確認する必要があります。または、私が唯一の選択肢であると思うので、 hook_views_query_alter を使用して、$ _ GETパラメーターに基づいて独自のビュークエリWHERE句を作成できます。
コンテキストフィルターを使用して複数の値を渡すことができます。
UrlからRaw Valueを選択し、PathComponent/arugumentを選択します。
以下により多くのセクションがあり、1 + 2 + 3(ORの場合)または1,2,3の形式で複数の値を許可を確認できます(および)。
http://example.com/some-path/24+25
または
クリスチャンとMPDに同意します。NIDには「のいずれか」のオプションはありません。 hook_views_query_alterに関するクリスチャンの答えは機能します。
代替ソリューションとして、フィルターハンドラーをカスタムハンドラーに置き換えることができます。検索APIクエリのソリューションは次のとおりです。次のハンドラーは「複数選択を許可」オプションを使用します。
class MYMODULESearchApiViewsHandlerFilter extends SearchApiViewsHandlerFilter {
/**
* Extends query to handle multiple values.
*/
public function query() {
if (!empty($this->options['expose']['multiple'])) {
$values = array();
// ...
// DO YOUR CODE HERE TO GET VALUES FROM $this->value
// E.g. $values = explode(',', $this->value);
// ...
if (!empty($values)) {
$or = $this->query->createFilter('OR');
foreach ($values as $value) {
$or->condition($this->real_field, $value, $this->operator, $this->options['group']);
}
$this->query->filter($or);
}
}
else {
parent::query();
}
}
}
ハンドラは、hook_views_data_alter()を使用して追加できます。
/**
* Implements hook_views_data_alter().
*/
function MYMODULE_views_data_alter(&$data) {
$data['search_api_index_MYINDEX']['MYFIELD']['filter']['handler'] = 'MYMODULESearchApiViewsHandlerFilter';
}
多分それはエンコーディングの問題だけです。私は同じ構成(公開されたフィルターに複数値フィールドを持つビュー)を持っています。送信ボタンを適用したときの結果は次のとおりです。
http://mywebsite.com/search-housing?field_rooms_value%5B%5D=1&field_rooms_value%5B%5D=2
これを試してみて、機能しているかどうか教えてください。
http://domain.com/api/books.json?author_nid%5B%5D=38&author_nid%5B%5D=32