2014-10-29 2 views
1

Я хочу поместить данные из веб-службы extern в свой веб-сайт SilverStripe. Я могу получить данные в массиве bij этот код:Как использовать данные json из внешней службы в шаблонах SilverStripe?

public function getBlogs(){ 

$service = new RestfulService("http://www.xxxxx.com/jsonservice/BlogWeb/"); 
$response = $service->request("getBlogs?token=xxxxx&id=250"); 
print_r(json_decode($response->getBody())); 

} 

Это показывает правильный массив данных на моем веб-сайте. Но как я могу обрабатывать эти данные, чтобы использовать их в шаблонах, например:

<% loop getBlogs %>$Title<% end_loop %> 

Заранее спасибо.

+1

возможно дубликат [SilverStripe: Преобразование твиттер JSON строку DataObject в цикле, хотя в шаблоне] (HTTP: // stackoverflow.com/questions/19888110/silverstripe-convert-twitter-json-string-to-dataobject-to-loop-though-in-templa) – jberculo

ответ

1

Конструкция цикла предназначена для перебора массивов и списков данных с каждым элементом в этом списке, который должен быть объектом DataObject. Поскольку json_decode возвращает массив объектов PHP, ваша функция getBlogs() должна будет перебирать этот массив и создавать ArrayList из DataObjects, которые описывают каждый из ваших блогов.

public function getBlogs() { 
     $blogs = ArrayList::create(); 
     if($response && $response->getStatusCode() == 200) { 
      $data = json_decode($response->getBody()); 
      foreach($blogs as $blog) { 
       $b = DataObject::create(); 
       $b->Column1 = $data->blah; 
       $b->Column2 = $data->bloo; 
       $blogs->push($b); 
      } 
     } 
     return $blogs; 
} 

< Ваш% цикл%> конструкт затем перебрать ArrayList:

<% loop getBlogs %> 
    $Me.Column1 is some column. So is $Column2. 
<% end_loop %> 
+0

Это немного старо, но вы можете опустить «получить». Например, '<% loop $ Blogs%>' – zanderwar

Смежные вопросы