Layout “在哪里?”;“助手”;“的块”;回顾“;模块注册?
我想自定义产品页面上的review summary块,但我似乎找不到review模块的Helper块(这是一个名为“Helper”的块,它不是Helper)在现有布局xml中的注册位置(连接到真实的类名) 我深入研究了Magento核心代码,以了解以下代码行:Layout “在哪里?”;“助手”;“的块”;回顾“;模块注册?,layout,magento,block,helper,review,Layout,Magento,Block,Helper,Review,我想自定义产品页面上的review summary块,但我似乎找不到review模块的Helper块(这是一个名为“Helper”的块,它不是Helper)在现有布局xml中的注册位置(连接到真实的类名) 我深入研究了Magento核心代码,以了解以下代码行: $this->getLayout->createBlock('modulename/blockname'); 计算结果如下: '名称空间\u模块名称\u块\u块名称' 不知何故,内存中的XML配置确实包含一个审阅组和一个助手
$this->getLayout->createBlock('modulename/blockname');
计算结果如下:
'名称空间\u模块名称\u块\u块名称'
不知何故,内存中的XML配置确实包含一个审阅组和一个助手,如第1173行的文件app/code/core/Mage/core/Model/Config.php所示:
1164 $classArr = explode('/', trim($classId));
1165 $group = $classArr[0];
1166 $class = !empty($classArr[1]) ? $classArr[1] : null;
1167
1168 if (isset($this->_classNameCache[$groupRootNode][$group][$class])) {
1169 return $this->_classNameCache[$groupRootNode][$group][$class];
1170 }
1171
1172 //$config = $this->getNode($groupRootNode.'/'.$group);
1173 $config = $this->_xml->global->{$groupType.'s'}->{$group};
1174
1175 if (isset($config->rewrite->$class)) {
1176 $className = (string)$config->rewrite->$class;
1177 } else {
1178 if (!empty($config)) {
1179 $className = $config->getClassName();
我使用Mage::log检查了第1173行后面的代码是否可以从$config
对象中获取所需信息
如果有人能给我一些建议,我将不胜感激。如果你看一下
app/code/core/Mage/Review/etc/config.xml
你可以看到,有一个节点在
<config>
<global>
<blocks>
<review>
<class>Mage_Review_Block</class>
</review>
</blocks>
</global>
</config>
法师复习组
这将review
注册为块的组。之后,无需专门将名为Helper的块配置为别名的类部分(groupname/classname
)将引导\u Camel\u Cased并附加到为组配置的类中。谢谢您的快速回答,很抱歉我没有早点回复您的问题。我是否理解任何重写只能在这个级别上完成?对我来说,这意味着如果我想对Review模块中的任何块进行子类化,我将被迫对所有块进行子类化但这可能是最好的地方:我试图在自定义模块的config.xml中重写“review\u helper”,因为整个“helper”是一个名为helper的块,而不是helper本身,这让我措手不及。它应该是“helper”“,现在它工作了@煎饼你说得对。类重写更类似于Python和ruby等语言中的monkey patching/duck类型。它提供了一种在运行时更改类方法行为的方法,而无需编辑该类文件。