データリストのフィルタをいくつか作成しようとしています。私は、ユーザーがタグのリストから1つまたは複数のフィルターを選択し、それらのフィルターに基づいてオブジェクトのリストを吐き出すことができるようにしたいと思います。すべてがCheckboxsetFieldの結果を、SilverStripeでコンマ区切りの文字列としてフォーマットするにはどうすればよいですか?
public function index(SS_HTTPRequest $request)
{
// ...
if($tagsParam = $request->getVar('tags')) {
$articles = new ArrayList();
$tagids = explode(",", $tagsParam);
foreach($tagids AS $tagid) {
$tag = Category::get()->byID($tagid);
$articleitems = $tag->getManyManyComponents('Articles')->sort('Date DESC');
foreach($articleitems AS $articleitem) {
$articles->push($articleitem);
}
}
}
$data = array (
'Articles' => $articles
);
if($request->isAjax()) {
return $this->customise($data)->renderWith('ListItems');
}
return $data;
}
このコードはmysite.com/?tags=1,2,3のようなURLで正常に動作します...送られているのparams URLに基づいてデータを取得し、このコードを使用して良いです
私の問題は、CheckboxSetFieldで構築されたフィルタに基づいてそのURLを生成しようとすることにあります。ここに私のコードはそのためである...
public function ArticlesSearchForm()
{
$tagsmap = $this->getTags()->map('ID', 'Title')->toArray();
$form = Form::create(
$this,
'ArticlesSearchForm',
FieldList::create(
CheckboxSetField::create('tags')
->setSource($tagsmap)
),
FieldList::create(
FormAction::create('doArticlesSearch','Search')
)
);
$form->setFormMethod('GET')
->setFormAction($this->Link())
->disableSecurityToken()
->loadDataFrom($this->request->getVars());
return $form;
}
ユーザーがそのフォームを送信すると、生成されたURLは= mysite.com?tags%5B1%5D=1 &タグ%5B2%5Dとの線に沿って何かであります2 & action_doArticlesSearch = Search明らかに、値を配列として渡しています。カンマ区切りの単純なリストを渡すにはどうすればよいですか?
ああ、!私はまだきれいなURLを好むだろうが、私は一日働かない以上の作業を取るだろう;)ありがとう!これを見ている人は、$ tagsid変数を '$ tagids = is_array($ tagsParam)に更新するだけです。 $ tagsParam:explode( "、"、$ tagsParam); ' – andrewhoule