Layout “在哪里?”;“助手”;“的块”;回顾“;模块注册?

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配置确实包含一个审阅组和一个助手

我想自定义产品页面上的review summary块,但我似乎找不到review模块的Helper块(这是一个名为“Helper”的块,它不是Helper)在现有布局xml中的注册位置(连接到真实的类名)

我深入研究了Magento核心代码,以了解以下代码行:

$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类型。它提供了一种在运行时更改类方法行为的方法,而无需编辑该类文件。