一般来说,我对 OOP 框架很陌生,尤其是 Silverstripe。我确信我错过了一些重要的东西!
我目前正在尝试为我的主页创建一个 Twitter feed。在我的 Page_controller 中我有:
public function getTwitterFeed() { ... }
...它获取一组推文。我可以以任何我喜欢的方式格式化这些数据,因此数据的结构和函数应该是无关的。
在 Silverstripe 教程中,他们给出了以下示例:
public function LatestNews($num=5) {
$holder = NewsHolder::get()->First();
return ($holder) ? News::get()->filter('ParentID', $holder->ID)->sort('Created', 'DESC')->limit($num) : false;
}
然后在模板中调用它,如下所示:
<% loop LatestNews %>
<% include NewsTeaser %>
<% end_loop %>
然而,这个函数基于 DataModel 对象 (NewsHolder),并且从数据库中获取数据(我的 twitter 函数不是)。
那么这个函数应该返回什么类型的变量呢?数组?一个东西?
在 SilverStripe 3.0 中,有 2 个东西叫做<% loop %>
and <% with %>
-
<% loop %>
需要任何实现 SS_List 的内容(例如:DataList、ArrayList)
-
<% with %>
接受我认为扩展 ViewAbleData 的任何类型的对象(例如:DataObject、ArrayData,...)
(在 SilverStripe 2.x 中只有<% control %>
两者兼而有之)
所以,你想做<% loop TwitterFeed %>
?
然后你需要返回一个ArrayList
一个简短的例子(未经测试,但应该有效):
public function getTwitterFeed() {
return new ArrayList(array(
new ArrayData(array(
'Name' => 'Zauberfisch',
'Message' => 'blubb',
)),
new ArrayData(array(
'Name' => 'Foo',
'Message' => 'ohai',
)),
new ArrayData(array(
'Name' => 'Bar',
'Message' => 'yay',
))
));
}
<% loop TwitterFeed %>
$Name wrote: $Message<br />
<% end_loop %>
所以,只需将从 twitter 获取的数组转换为 ArrayData 对象,然后将它们全部放入 ArrayList 中(每条推文应该是 1 个 ArrayData 对象)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)