Можно ли передать переменную из родительского шаблона в дочерний шаблон. Например, если бы я хотел поместить повторяющийся HTML-код в отдельный шаблон, который был включен в цикл foreach в его родительском шаблоне

<?php

foreach ($items as $item)
{
    echo $this->getChildHtml('item_info');
}

?>

Я хотел бы иметь доступ к переменной $ item в шаблоне item_info.

Благодарность

2
Tom 10 Июл 2009 в 21:08

2 ответа

Лучший ответ

Я разделил свой шаблон списка продуктов в отдельный файл, чтобы использовать его в нескольких местах.

В родительском шаблоне я делаю что-то вроде:

<?PHP
$this->getChild('product_list_list')->setData('products', $_productCollection);
echo $this->getChildHtml('product_list_list'); 
?>

В дочернем шаблоне я могу:

<?php foreach ($this->products as $_product): ?>
  // display products
<?php endforeach; ?>

Итак, вы должны уметь:

$this->getChild('item_info')->setData('item', $item);

А затем в item_info откройте его как

$this->item

Надеюсь, это сработает для вас. У меня работает на magento 1.3, но кажется довольно фундаментальным, поэтому, вероятно, общим для всех версий.

4
benlumley 11 Июл 2009 в 16:20

Я знаю, что это не новый пост, но вот небольшое завершение:

Вы должны вызвать getChildHtml с атрибутом cache в false, например:

$this->getChildHtml('item_info', false);

И тогда он будет работать отлично.

Спасибо Бенлумли

1
peperemanpepereman 9 Сен 2009 в 20:51