我有两个数据对象parent
和child
,parent
有许多child
人。 Child
有几个boolean
来描述它的状态,只有在特定状态下才会显示在此特定页面上。
在我的模板中,我有:
<% with $Parent %>
<% if $Child %><h1>Children</h1>
<% loop $Child %>
<p>$Child.Title</p>
<% end_loop %>
<% end_if %>
<% end_with %>
然而,这显然会显示所有Child
ren,我可以对其进行过滤:
<% $Child.Filter('Show', '1') %>
但是我不能为过滤器做多个项目(至少我可以搞清楚),所以我想我会在DataObject
上创建一个派生布尔值的函数显示它,但这不是我可以过滤的东西。
什么是达到我想要做的最佳方式?
答案 0 :(得分:4)
说这些是我们的Child
和Parent
类:
儿童
class Child extends DataObject {
private static $db = array(
'Title' => 'Varchar(1024)',
'Awesome' => 'Boolean',
'Fun' => 'Boolean'
);
private static $has_one = array(
'Parent' => 'Parent'
);
}
<强>父强>
class Parent extends DataObject {
private static $db = array(
'Title' => 'Varchar(1024)'
);
private static $has_many = array(
'Children' => 'Child'
);
}
我们可以向Parent
类添加函数以返回各种已过滤的Children
列表:
class Parent extends DataObject {
private static $has_many = array(
'Children' => 'Child'
);
public function getAwesomeChildren() {
return $this->Children()->filter('Awesome', true);
}
public function getAwesomeFunChildren() {
return $this->Children()->filter(array(
'Awesome' => true,
'Fun' => true
));
}
}
在我们的模板中,我们可以致电:
<% if $AwesomeChildren %>
<h1>Children</h1>
<% loop $AwesomeChildren %>
<p>$Title</p>
<% end_loop %>
<% end_if %>