1)Magento .phtml文件中$ this / $ resource变量引用了什么?
2)我在哪里可以找到可以与$ this / $ resource一起使用的方法列表?
print_r显示巨大的对象,其功能不是很容易理解。
答案 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
,您可以调用任何以get
,set
,{{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
代表保存此模板的块。在这种情况下,$this
是Namespace_Modulename_Block_Yyy
块的实例。 (假设xxx
代表Namespace_Modulename
模块。)。
因此,此类中未定义方法getSomeMethod()
,它肯定会显示错误。
希望能给你一个想法。