5

我一般是 OOP 框架的新手,尤其是 Silverstripe。我确定我错过了一些重要的东西!

我目前正在尝试为我的主页创建一个 twitter 提要。在我的 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 函数不是)。

那么这个函数应该返回什么类型的变量呢?数组?一个东西?

4

1 回答 1

16

在 SilverStripe 3.0 中有 2 个东西叫做<% 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 对象)

于 2012-08-22T15:16:55.203 回答