Как извлечь метку блока в xml из phtml в Magento?


У меня есть пользовательский блок в моем файле макета, как это:

<block type="xxx/xxx" name="xxx" template = "bar.phtml">
<label>Foo</label>
</block>

Как получить значение label из бара.phtml ?

Пожалуйста, обратите внимание, что я не хочу использовать функцию setData, чтобы установить мою переменную и передать ее. Я хочу извлечь значение внутри тегов из phtml (или где-либо еще). Надеюсь, все чисто.

2 2

2 ответа:

Я не думаю, что есть действительно классный способ Magento сделать это, так как метка цели блока не должна отображаться, насколько мы говорим о фронтенде.

Label : этот элемент введен начиная с Magento 1.4. Он определяет метку дескриптора, которая отображается в виде описательной ссылки в некоторых областях панели администратора.

Источник

Я бы очень тепло рекомендовал вам держаться подальше от кода ниже. Но если это действительно то, чего вы хотите достичь, это путь:

Сначала мы получаем layout = большую XML-конкатенацию макета для той страницы, содержащей xml, где определен блок, и, таким образом, нашу метку

$layout = $this->getLayout();

Тогда мы получаем текущее имя блока в макете

$currentBlockNameInLayout = $this->getNameInLayout();

Затем мы можем получить узел XML, представляющий текущий блок в шаблоне.
getXpath() does возвращает массив, поэтому я использовал list(), чтобы получить первый элемент из этого массив

list($currentBlockInLayout) = $layout->getXpath("//block[@name='".$currentBlockNameInLayout."']");

У нас есть то, что мы хотим, и мы можем повторить его элемент метки

echo $currentBlockInLayout->label;
Однако будьте осторожны, это объект типа Mage_Core_Model_Layout_Element, поэтому, если вы хотите сделать что-то еще, кроме его отображения, вам придется использовать метод __toString()
var_dump( $currentBlockInLayout->label->__toString() );

Полный код:

$layout = $this->getLayout();
$currentBlockNameInLayout = $this->getNameInLayout();
list($currentBlockInLayout) = $layout->getXpath("//block[@name='".$currentBlockNameInLayout."']");
echo $currentBlockInLayout->label;
var_dump( $currentBlockInLayout->label->__toString() );

В XML-файле используйте метод действия setData

<block type="xxx/xxx" name="xxx" template = "bar.phtml">
    <action method="setData">
        <label>Foo</label>
    </action>
</block>

Затем в вашем файле bar.phtml Вы можете извлечь его с помощью $this->getData('label'):

<?php echo $this->getData('label') ?>