ページリストブロックをオプションリスト属性でフィルターをかけたい

2018年5月9日 at 14:08

ページリストブロックをオプションリスト属性(複数項目のOR検索)でフィルターをかけたいと考えています。

オプションリストでチェックされている項目名を取得するところまではできたので、
その部分は良しとして、その値でフィルターをかけようとしています。

選択項目が1つ(例えば”CSS”)でフィルターをかける場合は、filterByAttributeメソッドへそのまま引数を渡すことで実現できました。


$list->filterByAttribute('project_skills', "CSS", "=");
$pages = $list->getResults();


ただ、複数の項目を選択した場合、下記のようにarrayで渡してみたのですが、
(例えば)”Java”分しか値を返してくれませんでした。


$arr=array("Java","CSS");

$list->filterByAttribute('project_skills', $arr, "=");
$pages = $list->getResults();


”Java”と”CSS”両方に該当するデータを取得するには、どのような値を渡せばよいか
ご教示いただけますと幸いです。

よろしくお願いいたします。

Version 8.3.1
PHP 5.6.33

タグ:

Re: ページリストブロックをオプションリスト属性でフィルターをかけたい

2018年5月9日 at 16:43
試してないですが

foreach ($arr => $word) {
$list->filterByAttribute('project_skills', $word, "=")
}

かな?
 

Re: ページリストブロックをオプションリスト属性でフィルターをかけたい

2018年5月9日 at 20:22
hissyさん、ありがとうございます。


foreach ($arr => $word) {


のところで
syntax error, unexpected '=>' (T_DOUBLE_ARROW)

と出てしまいます。

$arrの設定の仕方が悪いですかね?
 

Re: ページリストブロックをオプションリスト属性でフィルターをかけたい

2018年5月10日 at 10:48
あああ、超初心者なミスをしてしまいました。

foreach ($arr as $word) {

ですね。教科書でPHPの解説を書いておきながらこの体たらく…
 

Re: ページリストブロックをオプションリスト属性でフィルターをかけたい

2018年5月10日 at 20:35
いえいえ、ありがとうございます。

ただ、
$arr=array("Java","CSS");
foreach ($arr as $word) {
$list->filterByAttribute('project_skills', $word, "=")
}
$pages = $list->getResults();


とすると、$listが上書きされてしまい、最後の$listから$pagesを取得することになりますよね。
このままやってみた結果、”CSS”分しか取得できませんでした・・。

$pages = $list->getResults();

も上記ループの中に入れてしまうような方法があれば良いと思うのですが、
そのままだと、結局$pagesも上書きされてしまうので、何か良い方法はないでしょうか?

スミマセン、PHPをちゃんと理解してればすぐに解決できることかもしれないので
本当に恐縮なのですが、何卒ご教示ください。
 

Re: ページリストブロックをオプションリスト属性でフィルターをかけたい

2018年5月14日 at 13:34
ちゃんとコアのコード確認しました(汗

\Concrete\Attribute\Select\Controller::filterByAttribute

確かに、OR検索および複数の値には対応してませんでした。
上記メソッドのコードを拝借しつつ、orWhere() に変更して独自実装するしかないですね。

Doctrine クエリビルダのドキュメント
http://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/query-builder.html

PageList クラスから Doctrine クエリビルダを取得する方法
http://concrete5-japan.org/help/5-7/developer/working-with-pages/searching-and-sorting-with-the-pagelist-object/
 

Re: ページリストブロックをオプションリスト属性でフィルターをかけたい

2018年5月16日 at 14:25
hissyさん、ありがとうございます!

そうですかあ、高度なカスタマイズが必要なのですね。
勉強してみます。

ありがとうございました。m(__)m