我是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函数不是)。
那么这个函数应该返回什么类型的变量?数组?一个对象?
答案 0 :(得分:16)
有两个名为<% loop %>
和<% 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对象)