Я нашел несколько примеров фильтрации, но ничего достаточно ясно, чтобы ответить на мой вопрос. У меня есть следующая функция, чтобы получить страницы моих внуков. Я пытаюсь их подсчитать, но только если они отвечают определенным критериям. В моем случае, если они не имеют X, Y, Z, то включите их в счет.
Другими словами, хотелось бы добавить список / массив аргументов функции, которые, если ANY истинны, не включают их и не отфильтровывают. Например, если DealerOnly = true
игнорировать.
Я думал о том, чтобы сделать это в шаблоне и использовать if / else, но счет не будет отображаться таким образом, чтобы я не пошел по этому маршруту.
Альтернативные методы приветствуются.
<% loop $GrandChildren %>$Count<% end_loop %>
Возможная помощь: http://www.silverstripe.org/community/forums/data-model-questions/show/23507
Документы здесь: (не совсем то, что мне нужно) https://docs.silverstripe.org/en/3.1/developer_guides/model/searchfilters/
Моя функция возвращает страницы моего внука.
public function getGrandChildren() { $ids = Page::get()->filter(array('ParentID' => $this->ID))->getIDList(); $grandChildren = Page::get()->filter(array( 'ParentID' => $ids )); return $grandChildren; }
В моем шаблоне, который учитывает все страницы
$GrandChildren.Count
Ну, вы можете манипулировать своим DataList
как хотите, например
public function getGrandChildren() { $ids = Page::get()->filter(array('ParentID' => $this->ID))->getIDList(); $grandChildren = Page::get() ->filter(array( 'ParentID' => $ids )) ->exclude(array('DealerOnly' => true)); return $grandChildren; }
См. API-документы для DataList::exclude
и docs
Если вы хотите исключить, если какой-либо из столбцов в базе данных является истинным, вы должны использовать модификатор :not
searchfilter, поскольку, к сожалению, нет функции excludeAny()
.
->filter(array('DealerOnly:not' => true)) ->filter(array('Foo:not' => 'Bar'))
По какой-то причине я не получил других ответов на работу. Я узнал, что вы можете фильтровать в шаблоне.
$GrandChildren.Filter('DealerOnly','0').Count
Вы можете использовать -> exclude, поэтому для вас DataList …
$grandChildren->exclude(array( 'DealerOnly' => true ));