1

我正在构建一个存档页面,但无法按年提取和过滤我的结果。

页面类型有一个下拉菜单来选择应该显示哪一年

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 %>

感谢您的帮助!

4

2 回答 2

2

我建议做一些调试。您可以在其中添加一些点,GetFilms()例如var_dump($SubType);查看模板传递的内容。您应该检查是否可以使用虚拟值手动访问您的电影数据对象,例如Film::get()->filter(['Year' => 2013]),一旦您消除了数据源和方法的输入作为问题区域你可以把它拼凑起来。

DataObject::get我还建议使用 DataList 方法从参数转移到可链接的方法,例如:

public function GetFilms($SubType)
{
    return Film::get()->filter(['Year' => $SubType]);
}
于 2017-09-20T22:20:13.647 回答
0

从 $SubType 中删除额外的 '' 到
即 $films = DataObject::get("Film","'Year' = $SubType"); 当您将 $SubType 单引号括起来时,变为文字并且不评估该值

于 2017-09-23T12:00:03.043 回答