How to pass custom data to a template

别来无恙 提交于 2019-12-05 00:19:02

问题


I am new to OOP frameworks in general and Silverstripe in particular. I'm sure I'm missing something vital!

I am currently trying to create a twitter feed for my main page. In my Page_controller I have:

public function getTwitterFeed() { ... }

...which gets a set of tweets. I can format this data any way I like so the structure of the data and the function should be irrelevant.

In the Silverstripe tutorials they give the following example:

public function LatestNews($num=5) {
    $holder = NewsHolder::get()->First();
    return ($holder) ? News::get()->filter('ParentID', $holder->ID)->sort('Created', 'DESC')->limit($num) : false;
}

This is then called in the template as follows:

<% loop LatestNews %>
    <% include NewsTeaser %>
<% end_loop %>

However this function is based on a DataModel object (NewsHolder) and is getting data out of the database (which my twitter function is not).

So what type of variable should this function return? An array? An object?


回答1:


in SilverStripe 3.0 there are the 2 things called <% loop %> and <% with %>

  • <% loop %> expects anything that implements SS_List (eg: DataList, ArrayList)
  • <% with %> accepts any type of object that extends ViewAbleData I think (eg: DataObject, ArrayData, ...)

(in SilverStripe 2.x there is just <% control %> which does both things)

so, you want to do <% loop TwitterFeed %>? Then you need to return an ArrayList

a short example (not tested, but should work):

    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 %>

so, just turn your array that you get from twitter into ArrayData objects and put them all into a ArrayList (each tweet should be 1 ArrayData Object)



来源:https://stackoverflow.com/questions/12075176/how-to-pass-custom-data-to-a-template

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!