Передача дополнительных параметров в Zend partialLoop View Helper

В представлении Zend я могу применить частичный шаблон к итерируемому элементу следующим образом:

$this->partialLoop('template.phtml', $iterable);

Однако внутри шаблона доступны только элементы $iterable, есть ли другой способ передачи дополнительных данных в частичный?

Ответы

Ответ 1

Я использую

$this->partialLoop('template.phtml', array(
    'data' => $iterable, 
    'otherVariable' => $otherVariable
);

Предупреждение и изменение:

Чтобы быть полностью честным, я допустил ошибку. Я предполагаю, что код, который я предложил, не будет работать. Я ошибаюсь для частичного() помощника. Это не будет работать из-за этой части класса-помощника:

foreach ($model as $item) {
    // increment the counter variable
    $this->partialCounter++;
    $content .= $this->partial($name, $module, $item);
}

Он будет перебирать по всему массиву вместо ключа данных. Я не понимаю, как можно принять ответ: D Спасибо Nikolaus Dulgeridis за то, что указали это.

Вы даже не можете отправлять какие-либо дополнительные данные через $this- > view, потому что частичная часть состоит в том, что он создает "чистый" экземпляр представления, так что назначенные переменные не будут сталкиваться с вашими существующими переменными.

Возможные варианты

- Расширение помощника вида с помощью методов для установки настраиваемых переменных

- Итерировать массив и переформатировать его на

array(
    array('data' => $item1, 'id' => 1, 'totalCount' => 10) ,
    array('data' => $item2, 'id' => 2, 'totalCount' => 10) ,
    array('data' => $item3, 'id' => 3, 'totalCount' => 10) ,
)

- Используйте Registry для хранения значений.

Zend_Registry::set('partialLoopCount', $count);
$this->partialLoop($viewScript, $data);

- Сбросить partialLoop и использовать partial() вместо

Я предпочитаю это решение.

$count = count($data);
foreach ($data as $key => $value) {
    echo $this->partial($viewScript, array('item' => $value, 'position' => $key, 'count' => $count));
}

Ответ 2

Внутри частичного доступа вы можете получить доступ ко всем своим переменным вида с помощью:

$this->partialLoop()->view->myVariable

где myVariable - нормальная переменная вида ($this->view->myVariable в контроллере или $this->myVariable в представлении, которое на самом деле то же самое). В принципе, вы извлекаете объект PartialLoop(), затем называете его, а затем сами переменную.

Это, скорее всего, повлияет на производительность (и я не думаю, что это действительно MVC-friendly...) Но, эй: это работает.:)

Пример: Hardcode.nl == Joris Osterhaus

Ответ 3

Позже я нашел (вставить частично):

$this->getHelper('PartialLoop')->view->otherVariable; 

Ответ 5

В контроллере

$this->view->otherVariable = 'otherVariable';

В "partial file" - template.phtml

$this->otherVariable

(ZendFramework-1.11.4-минимальная)