Как извлечь метку блока в xml из phtml в Magento?
У меня есть пользовательский блок в моем файле макета, как это:
<block type="xxx/xxx" name="xxx" template = "bar.phtml">
<label>Foo</label>
</block>
Как получить значение label из бара.phtml ?
Пожалуйста, обратите внимание, что я не хочу использовать функцию setData, чтобы установить мою переменную и передать ее. Я хочу извлечь значение внутри тегов из phtml (или где-либо еще). Надеюсь, все чисто.
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() );