Magento对象在* .phtml文件中

时间:2014-08-13 11:40:48

标签: magento

1)Magento .phtml文件中$ this / $ resource变量引用了什么?

2)我在哪里可以找到可以与$ this / $ resource一起使用的方法列表?

print_r显示巨大的对象,其功能不是很容易理解。

2 个答案:

答案 0 :(得分:5)

模板文件(.phtml)包含在块方法中,因此可以返回正确的html。请参阅方法Mage_Core_Block_Template::fetchView 所有具有关联模板的块类都扩展了Mage_Core_Block_Template类。

所以$this实际上是正在使用的当前块类 理论上,一个模板可以由多个块类使用。但这种情况很少发生 如果你不知道$this是什么,只需在模板文件中添加:

echo get_class($this); 

您将获得班级名称 如果您需要可用的方法,可以执行以下操作:

echo "<pre>"; print_r(get_class_methods($this));echo "</pre>";

但是......你会发现你能够调用一些并不存在的方法 由于课程Mage_Core_Block_Template扩展Varien_Object实施方法__call,您可以调用任何以getset,{{1}开头的方法},uns即使方法不存在也不会出错。

我没有看到包含变量has的phtml,但您可以将其视为与$resource相同。

答案 1 :(得分:2)

我不理解你引用的$resource。但是$this代表定义该模板的块。

为了更清楚,假设你有一个看起来像这样的布局代码

<some_handle>
    <reference name="content">
        <block type="xxx/yyy" name="custom.block" as="custom.block" template="custom/template.phtml" />
    </reference>
</some_handle>

现在,在我们的演示布局中,您可以看到定义了一个块,它定义了一个模板template.phtml。现在你的template.phtml看起来像这样。

位置:app/design/frontend/<package>/<theme>/template/custom/template.phtml

<div>
     <?php $value = $this->getSomeMethod(); ?>
</div>

此处$this代表保存此模板的块。在这种情况下,$thisNamespace_Modulename_Block_Yyy块的实例。 (假设xxx代表Namespace_Modulename模块。)。

因此,此类中未定义方法getSomeMethod(),它肯定会显示错误。

希望能给你一个想法。