如何从Magento的phtml中获取xml中的块标签?

时间:2015-05-06 16:05:55

标签: magento

我的布局文件中有一个自定义块,如下所示:

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

如何从bar.phtml获取标签的值?

请注意我不想使用setData函数来设置我的变量并传递它。 我想从phtml(或其他任何地方)中提取标签内的值。我希望它清楚。

2 个答案:

答案 0 :(得分:4)

我不认为有一种非常优雅的Magento方式,因为就我们所说的前端而言,目标的标签不会显示。

  

标签:此元素是自Magento 1.4以来引入的。它定义了句柄的标签,在管理面板的某些区域显示为描述性参考。

Source

我非常热烈地建议您远离下面的代码。但如果这真的是你想要实现的目标,那就是一种方式:

首先我们得到布局=该页面布局的一个大的xml串联,其中包含定义块的xml,因此我们的标签

$layout = $this->getLayout();

然后我们在布局

中获取当前块名称
$currentBlockNameInLayout = $this->getNameInLayout();

我们可以,然后获取表示模板中当前块的XML节点。
getXpath()会返回一个数组,这就是为什么我使用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() );

答案 1 :(得分:2)

在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') ?>