2016-03-28 4 views
1

データリストのフィルタをいくつか作成しようとしています。私は、ユーザーがタグのリストから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明らかに、値を配列として渡しています。カンマ区切りの単純なリストを渡すにはどうすればよいですか?

答えて

2

CheckboxSetFieldの返品を変更するのではなく、コードを変更することをおすすめします。あなたはすでにここ配列にコンマ区切りのリストのリストを変換している考える:

$tagids = explode(",", $tagsParam);

このような何かを、このステップをスキップします:作品

public function index(SS_HTTPRequest $request) 
{ 
    // ... 
    if($tagsParam = $request->getVar('tags')) { 
     $articles = new ArrayList(); 
     //This has a minor risk of going bad if $tagsParam is neither an 
     //array of a comma-separated list 
     $tagids = is_array($tags) ? $tagsParam : explode(",", $tagsParam); 
+0

ああ、!私はまだきれいなURLを好むだろうが、私は一日働かない以上の作業を取るだろう;)ありがとう!これを見ている人は、$ tagsid変数を '$ tagids = is_array($ tagsParam)に更新するだけです。 $ tagsParam:explode( "、"、$ tagsParam); ' – andrewhoule