Estou usando o Magento versão 1.8.1.0.
Estou tentando criar um novo módulo de bloco personalizado, que utilizarei para criar uma nova página inicial.
- Espaço para nome: Crusader
- Módulo: CLHomePage
- Tipo de bloco: cruzada em casa
- Classe: Qwerty (apenas por enquanto durante o teste)
- Pacote de design: cruzado
- Tema: padrão
Isto é o que eu tenho até agora:
\ app \ etc \ modules \ Crusader_All.xml
<?xml version="1.0"?>
<config>
<modules>
<Crusader_CLHomePage>
<active>true</active>
<codePool>local</codePool>
</Crusader_CLHomePage>
</modules>
</config>
\ app \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml
<?xml version="1.0"?>
<config>
<modules>
<Crusader_CLHomePage>
<version>0.0.1</version>
</Crusader_CLHomePage>
</modules>
<global>
<blocks>
<crusaderhome>
<class>Crusader_CLHomePage_Block</class>
</crusaderhome>
</blocks>
</global>
</config>
\ app \ code \ local \ Crusader \ CLHomePage \ Block \ Qwerty.php
<?php
class Crusader_CLHomePage_Block_Qwerty extends Mage_Core_Block_Template
{
// Methods (optional)
}
?>
\ app \ design \ frontend \ crusader \ default \ layout \ local.xml
<?xml version="1.0" ?>
<layout>
<cms_index_index>
<reference name="content">
<block type="core/template" name="homepage" template="crusader/home.phtml">
<block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
</block>
</reference>
</cms_index_index>
</layout>
\ app \ design \ frontend \ crusader \ default \ template \ crusader \ home.phtml
<div id="home">
<p>Home Wrapper</p>
<?php echo $this->getChildHtml('homeads'); ?>
</div>
\ app \ design \ frontend \ crusader \ default \ template \ crusader \ homeads.phtml
<p>Adverts</p>
Agora, com o exposto acima, minha página inicial mostra apenas "Home Wrapper"; portanto, o conteúdo de home.phtml
é exibido, mas não o conteúdo de homeads.phtml
.
Se eu alterar o tipo de bloco para homeads
a core/template
, ele funciona, e eu vejo tanto "Home Wrapper" e "Anúncios". Então eu sei que o problema tem algo a ver com a referência ao meu novo tipo de bloco (chamado cruzada em casa).
O que eu estou fazendo errado aqui..?
EDITAR
Após sugestões nas respostas, atualizei alguns arquivos da seguinte forma, mas ainda não funciona:
\ app \ etc \ modules \ Crusader_Home.xml
<?xml version="1.0"?>
<config>
<modules>
<Crusader_Home>
<active>true</active>
<codePool>local</codePool>
</Crusader_Home>
</modules>
</config>
\ app \ code \ local \ Crusader \ Home \ etc \ config.xml
<?xml version="1.0"?>
<config>
<modules>
<Crusader_Home>
<version>1.0.0</version>
</Crusader_Home>
</modules>
<global>
<blocks>
<crusader_home>
<class>Crusader_Home_Block</class>
</crusader_home>
</blocks>
</global>
</config>
\ app \ code \ local \ Crusader \ Home \ Block \ Qwerty.php
<?php
class Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template
{
// Methods (optional)
}
?>
\ app \ design \ frontend \ crusader \ default \ layout \ local.xml (simplificado para usar apenas um bloco em vez dos blocos aninhados que eu estava tentando antes)
<?xml version="1.0" ?>
<layout>
<cms_index_index>
<reference name="content">
<block type="crusader_home/qwerty" name="homepage" template="crusader/home.phtml" />
</reference>
</cms_index_index>
</layout>
\ app \ design \ frontend \ crusader \ default \ template \ crusader \ home.phtml
<p>Home</p>
Então, eu ainda estou em uma posição onde nada mostra.
Depois de ser solicitado por @FabianBlechschmidt, ativei os logs, e isso é exibido em exception.log:
2014-04-09T14:04:54+00:00 ERR (3):
exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty' in W:\stores\magento-dev\app\Mage.php:595
Stack trace:
#0 W:\stores\magento-dev\includes\src\__default.php(27744): Mage::throwException('Invalid block t...')
#1 W:\stores\magento-dev\includes\src\__default.php(27686): Mage_Core_Model_Layout->_getBlockInstance('crusader_home/q...', Array)
#2 W:\stores\magento-dev\includes\src\__default.php(27721): Mage_Core_Model_Layout->createBlock('crusader_home/q...', 'homepage')
#3 W:\stores\magento-dev\includes\src\__default.php(27488): Mage_Core_Model_Layout->addBlock('crusader_home/q...', 'homepage')
#4 W:\stores\magento-dev\includes\src\__default.php(27454): Mage_Core_Model_Layout->_generateBlock(Object(Mage_Core_Model_Layout_Element), Object(Mage_Core_Model_Layout_Element))
#5 W:\stores\magento-dev\includes\src\__default.php(27459): Mage_Core_Model_Layout->generateBlocks(Object(Mage_Core_Model_Layout_Element))
#6 W:\stores\magento-dev\includes\src\__default.php(13895): Mage_Core_Model_Layout->generateBlocks()
#7 W:\stores\magento-dev\includes\src\__default.php(11274): Mage_Core_Controller_Varien_Action->generateLayoutBlocks()
#8 W:\stores\magento-dev\includes\src\__default.php(11213): Mage_Cms_Helper_Page->_renderPage(Object(Mage_Cms_IndexController), 'home')
#9 W:\stores\magento-dev\app\code\core\Mage\Cms\controllers\IndexController.php(45): Mage_Cms_Helper_Page->renderPage(Object(Mage_Cms_IndexController), 'home')
#10 W:\stores\magento-dev\includes\src\__default.php(13969): Mage_Cms_IndexController->indexAction()
#11 W:\stores\magento-dev\includes\src\__default.php(18331): Mage_Core_Controller_Varien_Action->dispatch('index')
#12 W:\stores\magento-dev\includes\src\__default.php(17865): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#13 W:\stores\magento-dev\includes\src\__default.php(20465): Mage_Core_Controller_Varien_Front->dispatch()
#14 W:\stores\magento-dev\app\Mage.php(684): Mage_Core_Model_App->run(Array)
#15 W:\stores\magento-dev\index.php(176): Mage::run('crusadergifts', 'store')
#16 {main}
Alguma idéia do que está acontecendo .. ??
EDIT n.º 2
@ Malachy Encontrou a resposta ... Era o compilador. Desativei o compilador e ele parece funcionar agora.
exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
Respostas:
Acho a coisa toda XML difícil, por isso sou solidário à sua causa aqui.
Parece-me que há uma discrepância com o nome da sua classe e o seu bloco XML
ie
e
Vamos começar com o tipo de bloco e trabalhar para trás. Eu acho que aqui eu esperaria ver algo como
e esse tipo referiria Magento à classe
Continuando a trabalhar com retrocesso nessa questão, o arquivo app \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml precisaria ser modificado para algo como
Aponta o Magento para todas as classes iniciando 'Crusader_Home_Block_ *'. E agora acho que você precisa renomear seu módulo Crusader_Home em vez de Crusader_CLHomePage e alterar os nomes das pastas de acordo ...
E / MAS eu recomendo fortemente que você altere o nome do módulo. Use sempre apenas uma letra maiúscula no início do nome do módulo e não três e também não coloque letras maiúsculas no meio do nome.
Você pode querer examinar algumas das ferramentas disponíveis para gerar módulos. Acho-os muito úteis para evitar erros de digitação. Eu uso esse aqui pelas pessoas muito inteligentes da MGT Commerce (ele tem simplicidade de lado) e este é abrangente e uma parte surpreendente de codificação da Silk Software .
*** EDITAR seguindo os comentários abaixo
Além disso, com base no log de erros, acho que o problema é que o Magento não consegue encontrar o arquivo de classe. Portanto, verifique novamente se os caches estão atualizados ou desativados, principalmente o cache XML, e se o compilador está desativado ou reativado .
fonte
<block type="crusaderhome/qwerty"
está incorreto. A solução é tanto um) corrigir o XML e b) re-compilaçãoresponda sua pergunta em primeiro lugar
deve ser substituído por
porque homeads não é filho da página inicial. Eu acho que isso funcionaria.
fonte
Eu obtive o mesmo problema e o resolvi substituindo o código a seguir no config.xml
para isso
Deve resolver o problema.
fonte