Я создаю страницу архива, и у меня возникают проблемы с извлечением и фильтрацией результатов по годам.
Тип страницы имеет выпадающий список, чтобы выбрать, какой год должен отображаться
private static $db = array(
"SubType" => "Enum(array('2013', '2014', '2015', '2016', '2017', '2018'))");
Шаблон вызывает функцию GetFilms
public function GetFilms()
{
$films = DataObject::get("Film");
return $films;
}
Если я использую функцию выше, она работает, но отображает все фильмы.
Когда я пытаюсь изменить его для фильтрации, используя год, который был пройден,
public function GetFilms($SubType)
{
$films = DataObject::get("Film","'Year' = '$SubType'");
return $films;
}
На странице больше не отображаются фильмы. Кто-нибудь знает, что я делаю не так?
Вот код для отображения результатов,
<% loop GetFilms($SubType) %>
<div class="film" data-title="$Title">
<a href="$Top.Link?film=$ID">
<div class="inner">
<h3 class="filmTitle">$Title</h3>
<img class="filmImg" src="$FilmImage.URL" alt="$Title" />
</div>
</a>
</div>
<% end_loop %>
Спасибо за помощь!
То, что я бы посоветовал, это сделать отладку. Вы можете добавить несколько очков в GetFilms()
например var_dump($SubType);
чтобы увидеть, что передает шаблон. Вы должны убедиться, что к вашим объектам Film DataObjects можно обращаться вручную, используя фиктивные значения, например, Film::get()->filter(['Year' => 2013])
затем, после того как вы исключили источник данных и входные данные метода в качестве проблемных областей, вы можете собрать их воедино.
Я бы также предложил отойти от DataObject::get
аргументы для цепного подхода с использованием методов DataList, например:
public function GetFilms($SubType)
{
return Film::get()->filter(['Year' => $SubType]);
}
удалить лишний » из $ SubType в
т.е. $ films = DataObject :: get («Film», «Year» = $ SubType «);
когда вы помещаете одинарную кавычку в $ SubType, становитесь литералом и не оцениваете значение