Veri uzmanları için bazı filtreler oluşturmaya çalışıyorum. Kullanıcının etiket listesinden bir veya birden çok filtre seçmesini ve ardından bu filtrelere dayanarak bir nesne listesi çıkarmasını isterim. TümBiçim, bir CheckboxsetField'ın sonuçlarını SilverStripe'de virgülle ayrılmış bir dize olarak nasıl edinebilirim?
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;
}
O kod mysite.com/?tags=1,2,3 gibi bir URL'ye sahip çalışıyor ... gönderiliyor params URL'ye dayalı verileri kapmak için bu kodu kullanarak iyidir
Sorunum, CheckBoxSetField ile oluşturulan filtrelere dayanarak bu URL'yi oluşturmaya çalışmakla birlikte gelir. İşte benim kod bunun için bir ...
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;
}
kullanıcı bu form gönderdiğinde, oluşturulan URL = mysite.com?tags%5B1%5D=1 & etiketler% 5b2% 5D çizgisinde bir şeydir 2 & action_doArticlesSearch = Arama Açıkçası, değerleri bir dizi olarak iletiyor. Basit bir virgülle ayrılmış listeyi nasıl geçebilirim?
Ah, o çalışıyor! Yine de temiz URL'yi tercih ederim, ancak herhangi bir gün çalışmamaya çalışacağım;) Teşekkürler! Bu aşağıya bakmakta olan herkes için, $ tagid değişkenini '$ tagids = is_array ($ tagsParam) olarak güncellemeniz gerekecek mi? $ tagsParam: patlayabilir (",", $ tagsParam); ' – andrewhoule