Невозможно вызвать блок из файла шаблона
У меня есть пользовательский модуль и я создал дескриптор блока в своем файле конфигурации, как показано ниже
<blocks>
<onestepcheckout>
<class>Ucs_OneStepCheckout_Block</class>
</onestepcheckout>
.
.
.
</blocks>
Затем создал файл блока внутри приложения/кода/локального/ucs/OneStepCheckout, как показано ниже
<?php
class Ucs_OneStepCheckout_Block_Review extends Mage_Core_Block_Template
{
public function getReviewTemplate()
{
return 'Success';
}
}
Затем пытается создать getReviewTemplate
из theme/checkout/onepage.phtml
, как показано ниже
$block=$this->getLayout()->createBlock('onestepcheckout_review')->getReviewTemplate();
echo '<pre>'; print_r($block);
Он выдает ошибку, как показано ниже
Неустранимая ошибка: Вызов функции-члена getReviewTemplate() для не-объекта
Что не так с моим кодом?
2 answers
У вас неправильный тип блока, должно быть
createBlock('onestepcheckout_review')
Должно быть
createBlock('onestepcheckout/review')
Это логика, подобная:
Префикс типа блока/имя класса RESTOF.
onestepcheckout
префикс типа блока/имя группы модуляUcs_OneStepCheckout
модуля, как вы определяете в config.xml
<blocks>
<onestepcheckout><!-- this is called as block type prefix / group name of module Ucs_OneStepCheckout -->
<class>Ucs_OneStepCheckout_Block</class>
</onestepcheckout>
....
Если вы хотите вызвать Ucs_OneStepCheckout_Block_Review
класс как тип блока, то преобразуйте следующим образом:
-
Ucs_OneStepCheckout_Block
=onestepcheckout
Review
= review
Между именем группы блоков и остальными должно прийти имя класса a /
.
Таким образом, тип блока onestepcheckout/review
Это onestepcheckout/review
, а не onestepcheckout_review
(псевдоним группы классов, косая черта, остальная часть имени класса в виде змеи)