通过 DataObject 上的派生方法在模板中过滤
Filtering in template via derived method on DataObject
我有两个数据对象 parent
和 child
,其中 parent
有很多 child
ren。 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
上创建一个函数,这将是要显示的派生布尔值它,但是这不是我可以过滤的东西。
实现我想要做的事情的最佳方法是什么?
假设这些是我们的 Child
和 Parent
classes:
Child
class Child extends DataObject {
private static $db = array(
'Title' => 'Varchar(1024)',
'Awesome' => 'Boolean',
'Fun' => 'Boolean'
);
private static $has_one = array(
'Parent' => 'Parent'
);
}
Parent
class Parent extends DataObject {
private static $db = array(
'Title' => 'Varchar(1024)'
);
private static $has_many = array(
'Children' => 'Child'
);
}
我们可以将函数添加到 Parent
class 到 return 各种过滤的 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 %>
我有两个数据对象 parent
和 child
,其中 parent
有很多 child
ren。 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
上创建一个函数,这将是要显示的派生布尔值它,但是这不是我可以过滤的东西。
实现我想要做的事情的最佳方法是什么?
假设这些是我们的 Child
和 Parent
classes:
Child
class Child extends DataObject {
private static $db = array(
'Title' => 'Varchar(1024)',
'Awesome' => 'Boolean',
'Fun' => 'Boolean'
);
private static $has_one = array(
'Parent' => 'Parent'
);
}
Parent
class Parent extends DataObject {
private static $db = array(
'Title' => 'Varchar(1024)'
);
private static $has_many = array(
'Children' => 'Child'
);
}
我们可以将函数添加到 Parent
class 到 return 各种过滤的 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 %>