Вопрос

У меня есть коллекция дилерских магазинов. Я реализовал функцию, которая вычисляет расстояние всех магазинов от местоположения клиента, и у меня есть множество соответствующих расстояний. Я добавил логику в файле 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top