Estoy usando Magento versión 1.8.1.0.
Estoy tratando de crear un nuevo módulo de bloque personalizado, que usaré para crear una nueva página de inicio.
- Espacio de nombres: cruzado
- Módulo: CLHomePage
- Tipo de bloque: cruzada a casa
- Clase: Qwerty (solo por ahora durante las pruebas)
- Paquete de diseño: cruzado
- Tema: predeterminado
Esto es lo que tengo hasta ahora:
\ 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>
Ahora, con lo anterior en su lugar, mi página de inicio muestra solo "Home Wrapper", por lo que home.phtml
se muestra el contenido de , pero no el contenido de homeads.phtml
.
Si cambio el tipo de bloque para homeads
a core/template
, funciona, y veo tanto "Home Wrapper" como "Adverts". Así que sé que el problema tiene algo que ver con la referencia a mi nuevo tipo de bloque (llamado hogar de cruzada).
Qué estoy haciendo mal aquí..?
EDITAR
Después de las sugerencias en las respuestas, he actualizado algunos archivos de la siguiente manera, pero aún no 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 solo un bloque en lugar de los bloques anidados que estaba intentando 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>
Así que todavía estoy en una posición donde nada se muestra.
Después de que @FabianBlechschmidt me lo solicite, encendí los registros y esto se muestra en 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}
Alguna idea de lo que está pasando ... ??
EDITAR No 2
@Malachy encontró la respuesta ... Fue el compilador. Inhabilité el compilador y parece funcionar ahora.
exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
Respuestas:
Encuentro todo el asunto XML difícil, así que simpatizo con su causa aquí.
Me parece que hay una discrepancia con su nombre de clase y su bloque XML
es decir
y
Comencemos con el tipo de bloque y trabajemos hacia atrás. Creo que aquí esperaría ver algo como
y ese tipo referiría a Magento a la clase
Continuando trabajando hacia atrás en esta táctica, el archivo app \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml necesitaría ser modificado para algo como
Apunta a Magento a todas las clases que comienzan con 'Crusader_Home_Block_ *'. Y ahora creo que debe cambiar el nombre de su módulo Crusader_Home en lugar de Crusader_CLHomePage y cambiar los nombres de las carpetas en consecuencia ...
Y / PERO Le recomiendo que cambie el nombre de su módulo. Solo use una letra mayúscula al comienzo del nombre del módulo, no tres y tampoco ponga letras mayúsculas en el medio del nombre.
Es posible que desee ver algunas de las herramientas disponibles para generar módulos. Los encuentro muy útiles para evitar errores de escritura. Lo uso por personas muy inteligentes en MGT Commerce (tiene la simplicidad de su lado) y este es una codificación que abarca todo y es sorprendente por Silk Software .
*** EDITE los siguientes comentarios a continuación
Además, según el registro de errores, creo que el problema es que Magento no puede encontrar su archivo de clase. Por lo tanto, verifique que las memorias caché estén actualizadas o desactivadas, en particular la memoria caché XML, y que el compilador esté desactivado o reactivado .
fuente
<block type="crusaderhome/qwerty"
es incorrecto. La solución es tanto a) corregir el XML como b) volver a compilarresponde tu pregunta en primer lugar
debe ser reemplazado por
porque homeads no es hijo de la página de inicio. Creo que esto funcionaría.
fuente
Obtuve el mismo problema y lo resolví reemplazando el siguiente código en config.xml
a esto
Debería resolver el problema.
fuente