Где зарегистрирован вспомогательный блок модуля обзора?

Я хочу настроить блок сводки обзора на странице продукта, но не могу найти, где зарегистрирован вспомогательный блок (это блок под названием «Помощник», это не помощник) модуля обзора (подключен к реальному имени класса) в существующем макете xml.

Я немного покопался в коде ядра Magento, чтобы увидеть, как выглядит такая строка:

$this->getLayout->createBlock('modulename/blockname');

оценивается примерно так: 'Namespace_Modulename_Block_Blockname'

Каким-то образом XML-конфигурация в памяти содержит группу проверки и помощника, как показано в файле app/code/core/Mage/Core/Model/Config.php в строке 1173:

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.

Если кто-нибудь может дать мне советы по этому поводу, я буду очень признателен.


person pancake    schedule 10.11.2011    source источник


Ответы (1)


Если вы посмотрите на

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) будет Leading_Camel_Cased и добавлена ​​к классу, настроенному для группы.

person Alan Storm    schedule 10.11.2011
comment
Спасибо, за ваш быстрый ответ, я сожалею, что не ответил на ваш вопрос раньше. Я так понимаю, что любое переписывание возможно только на этом уровне? Для меня это означало бы, что если бы я захотел создать подкласс любого блока в модуле обзора, я был бы вынужден создать подкласс ВСЕХ из них. - person pancake; 16.11.2011
comment
Но это, вероятно, лучшее место для этого: я попытался переписать review_helper в config.xml моего пользовательского модуля, потому что меня застало врасплох то, что весь хелпер представляет собой блок с именем helper, а не сам хелпер. Это должно было быть помощником, теперь это работает! - person pancake; 16.11.2011
comment
@pancake Вы правы. Переписывание классов больше похоже на исправление/утиную печать обезьян в таких языках, как Python и ruby. Это дает вам возможность изменить поведение метода класса во время выполнения без редактирования этого файла класса. - person Alan Storm; 16.11.2011