Невозможно вызвать блок из файла шаблона


У меня есть пользовательский модуль и я создал дескриптор блока в своем файле конфигурации, как показано ниже

    <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() для не-объекта

Что не так с моим кодом?

Author: Butterfly, 2015-09-07

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

 3
Author: Amit Bera, 2015-09-07 06:52:46

Это onestepcheckout/review, а не onestepcheckout_review (псевдоним группы классов, косая черта, остальная часть имени класса в виде змеи)

 1
Author: Fabian Schmengler, 2015-09-07 06:24:47