Как передать пользовательские данные в шаблон

Я новичок в рамках OOP в целом и Silverstripe в частности. Я уверен, что мне не хватает чего-то жизненно важного!

В настоящее время я пытаюсь создать твиттер для своей главной страницы. В моем 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) и получает данные из базы данных (что не работает моя функция твиттера).

Итак, какой тип переменной должен возвращать эта функция? Массив? Объект?

Solutions Collecting From Web of "Как передать пользовательские данные в шаблон"

в 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)