2012-04-01 3 views
1

я создал новый модуль, в котором я создаю блок с помощью следующего метода в IndexController.php который находится на app/code/local/Ashfame/Helloblock/controllers/IndexController.phpошибка Magento создания блока

class Ashfame_Helloblock_IndexController extends Mage_Core_Controller_Front_Action { 

    public function indexAction() { 
     // this works fine 
     $block = new Ashfame_Helloblock_Block_Helloblock(); 
     echo $block->toHtml(); 
    } 

    public function layoutAction() { 
     // this doesn't work 
     $layout = Mage::getSingleton('core/layout'); 
     $block = $layout->createBlock('ashfame_helloblock/helloblock','root'); 
     var_dump($block); // this returns false 
     echo $block->toHtml(); 
    } 
} 

Мой блок класс Ashfame_Helloblock_Block_Helloblock и находится в app/code/local/Ashfame/Helloblock/Block/Helloblock.php

Поскольку $block в layoutAction() ложна, PHP выдает ошибку Call to a member function toHtml() on a non-object

на отладки я обнаружил, что Magento является выяснение имя класса неверно. Он определяет имя класса как mage_Ashfame_helloblock_block внутри getGroupedClassName().

Что здесь не так?

+0

Что ваше приложение/код/​​местные/Ashfame/Helloblock/и т.д./config.xml выглядеть? – nachito

+1

Хорошее отслеживание работы через сопоставление имен классов. Сердце исследователя так важно в развитии Magento. – benmarks

+0

@benmarks heh спасибо! Я второй, что :) – Ashfame

ответ

2

Я думаю, что проблема в вашем файле конфигурации. В app/code/local/Ashfame/Helloblock/etc/config.xml вы должны иметь:

<config> 
    ... 
    <global> 
    ... 
    <blocks> 
     <ashfame_helloblock> 
      <class>Ashfame_Helloblock_Block</class> 
     </ashfame_helloblock> 
    </blocks> 
    </global> 
</config> 
+0

Спасибо! Это сделало так, что '' должен быть '' для его работы :) – Ashfame

+0

Я беру этот комментарий назад. Должно быть, в то время было что-то еще. Это должно быть в нижнем регистре, как показано в примере кода. – Ashfame

Смежные вопросы