Передача нескольких массивов данных в шаблон в Silverstripe - PullRequest
0 голосов
/ 22 мая 2018

В Silverstripe 4 я хотел бы использовать два цикла на одном шаблоне страницы.Массивы создаются внутри одной функции внутри моего Page Controller.

Моя идея состояла в том, чтобы создать два ArrayList, а затем объединить их в третий ArrayList, который я передаю шаблону.

Используя SQLSelect, у меня есть некоторый код, который создает ArrayList данных.$ queryArray - это массив пар ключ => значение.

$sqlQuery = new SQLSelect();
$sqlQuery->setFrom('Wine');
$sqlQuery->addWhere($queryArray);
$results = $sqlQuery->execute();
$SSArrayList = new ArrayList; //new ArrayList;

foreach($results as $result) {
    $SSArrayList->push(new ArrayData($result));
}

У меня есть другой код, который создает другой ArrayList из тех же результатов $:

foreach($results as $result) {
  if (!empty($result['BrandName'])) {
      $JSBrandsArray->push(array('Brandname'=>$result['BrandName']));
  }
}

Затем третий ArrayList объединяет эти два массива:

$mainArray = new ArrayList;
$mainArray->push($SSArrayList);
$mainArray->push($JSBrandsArray);

$ mainArray передается в шаблон следующим образом:

return $this->customise(array('MainArray'=>$mainArray))->renderWith("Layout/WinesList");

Затем в шаблоне WinesList.ss я подумал, что мог бы сделать что-то вроде этого:

<% loop $MainArray %>
    <% loop $SSArrayList %>
    // show results from $SSArrayList
    <% end_loop %>

    <% loop $JSBrandsArray %>
    // show results from $JSBrandsArray
    <% end_loop %>
<% end_loop %>

Если яvar_dump () $ mainArray из контроллера страницы, $ mainArray, похоже, содержит все данные, но я не могу понять, как правильно получить доступ к данным из шаблона.

Возможно ли это вообще?Если так, что я делаю не так?

1 Ответ

0 голосов
/ 24 мая 2018

Я понял, что мне не нужен $ mainArray.Несколько шаблонов могут быть отправлены в шаблон с помощью метода renderWith.Вот решение, к которому я пришел:

return $this->renderWith("Layout/WinesList",array(
'SS_WinesArray' => $SS_WinesArray,
'JS_CountriesArray' => $JS_CountriesArray,
'JS_BrandsArray'    => $JS_BrandsArray,
// more arrays can be added here and looped in the template below
));

<% loop $SS_WinesArray %>
// I do JS stuff with this, which interacts with the categories 
// I have set up in the other arrays, but prefixed it SS to 
// differentiate it from the other arrays, which I'm using as category filters
<% end_loop %>

<% loop $JS_CountriesArray %>
// do JS stuff with the just the $JS_CountriesArray
<% end_loop %>

<% loop $JS_BrandsArray %>
// do JS stuff with the just the $JS_BrandsArray
<% end_loop %>

// loop through more arrays, if added to the renderWith method above. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...