Передача массива из файла блока в файл шаблона
-
16-10-2019 - |
Вопрос
У меня есть коллекция дилерских магазинов. Я реализовал функцию, которая вычисляет расстояние всех магазинов от местоположения клиента, и у меня есть множество соответствующих расстояний. Я добавил логику в файле block.php.
Теперь я хочу, чтобы этот массив был доступен из файла шаблона. Как мне это реализовать?
Все ответы, которые я получаю из Интернета, полностью противоположны тому, чего нужны - передача данных из файла шаблона, чтобы заблокировать файл
Любая помощь будет оценена ..
Решение
Шаблон находится внутри контекста класса блока, это означает, какую информацию вы вкладываете $block->setMyPersonalVar($value)
можно прочитать с $this->getMyPersonalValue()
Внутри шаблона. Таким образом, если у вас есть ссылка на класс Block в $ Block, вы можете установить любое значение на нем.
Это можно использовать в самом классе блока, например, в toHtml
или в классе контроллера $this->getLayout()->getBlock('nameInLayout')->setMyPersonalValue()
или где бы вы ни захотите, например, в наблюдателях с Mage::app()->getLayout()->getBlock('nameInLayout')->setMyPersonalValue()
Альтернатива - использовать Mage::register('name', $value)
а также Mage::registry('name')
Если это не работает, мое первое предположение: код выполняется в неправильном порядке
Другие советы
Хорошо, давайте рассмотрим пример:
Ваш блочный файл состоит из функции, которая возвращает вашу "Множество", как
public function someFunction(){
//your logic
return $your_array;
}
в вашем config.xml
<config>
...
<frontend>
...
<layout>
<updates>
<yournamespace_yourmodule module="Yournamspace_YourModule">
<file>something.xml</file>
</yournamespace_yourmodule>
</updates>
</layout>
В приложении/Design/frontend/default/your_theme/mayout/shether.xml
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">
<block_in_which_you_want_your_template>
<reference name="parent_block_name">
<block type="yourmodule/block_path" name="unique_name" template="path/to/your/template.phtml" /> <!-- important part of this answer -->
</reference>
...
Теперь в вашем шаблоне. phtml
вызов $this->someFunction()
Чтобы получить массив.
Ключ - это объявление блока с помощью вашего шаблона в чем -то. XML, чтобы все участники из вашего блока можно было получить в шаблоне с объектом ($this
).