Saya menggunakan Magento versi 1.8.1.0.
Saya mencoba membuat modul blok khusus baru, yang akan saya gunakan untuk membuat beranda baru.
- Namespace: Crusader
- Modul: CLHomePage
- Jenis Blok: rumah perang salib
- Kelas: Qwerty (hanya untuk saat pengujian)
- Paket Desain: crusader
- Tema: default
Inilah yang saya miliki sejauh ini:
\ 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>
Sekarang, dengan di atas di tempat, halaman rumah saya hanya menunjukkan "Pembungkus Rumah", sehingga konten home.phtml
ditampilkan, tetapi bukan konten homeads.phtml
.
Jika saya mengubah jenis blok homeads
menjadi core/template
, ia berfungsi, dan saya melihat "Pembungkus Beranda" dan "Iklan". Jadi saya tahu masalahnya ada hubungannya dengan referensi ke tipe blok baru saya (disebut crusade home).
Apa yang saya lakukan salah di sini ..?
EDIT
Setelah saran dalam jawaban, saya telah memperbarui beberapa file sebagai berikut, tetapi masih tidak berfungsi:
\ 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 (disederhanakan hanya menggunakan satu blok alih-alih blok bersarang yang saya coba sebelumnya)
<?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>
Jadi saya masih dalam posisi di mana tidak ada yang terlihat.
Setelah diminta oleh @FabianBlechschmidt, saya telah mengaktifkan log, dan ini ditampilkan di 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}
Ada ide apa yang terjadi .. ??
EDIT No 2
@Malachy Menemukan jawabannya ... Itu adalah kompiler. Saya menonaktifkan kompiler dan sepertinya berfungsi sekarang.
exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
Jawaban:
Saya merasa seluruh XML sulit, jadi saya bersimpati pada tujuan Anda di sini.
Bagi saya sepertinya ada perbedaan dengan nama kelas Anda dan blok XML Anda
yaitu
dan
Mari kita mulai dengan tipe blok dan bekerja mundur. Saya pikir di sini saya akan berharap untuk melihat sesuatu seperti
dan tipe itu akan merujuk Magento ke kelas
Terus bekerja mundur pada taktik ini, aplikasi file \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml perlu dimodifikasi menjadi sesuatu seperti:
Itu menunjuk Magento ke semua kelas mulai 'Crusader_Home_Block_ *'. Dan sekarang saya pikir Anda perlu mengganti nama modul Anda Crusader_Home daripada Crusader_CLHomePage dan mengubah nama folder yang sesuai ...
DAN / TAPI Saya sangat menyarankan Anda mengubah nama modul Anda. Hanya gunakan satu huruf kapital saja di awal nama modul bukan tiga dan jangan letakkan huruf kapital di tengah nama juga.
Anda mungkin ingin melihat beberapa alat yang tersedia untuk menghasilkan modul. Saya menemukan mereka sangat berguna untuk menghindari kesalahan pengetikan. Saya menggunakan yang ini oleh orang-orang yang sangat pintar di MGT Commerce (memiliki kesederhanaan di pihaknya) dan yang ini mencakup semua dan bagian yang menakjubkan dari pengkodean oleh Silk Software .
*** Sunting komentar berikut di bawah ini
Selain itu berdasarkan pada log kesalahan saya pikir masalahnya adalah bahwa Magento tidak dapat menemukan file kelas Anda. Jadi periksa kembali apakah cache di-refresh atau dimatikan, terutama cache XML, dan kompilator dimatikan atau diaktifkan kembali .
sumber
<block type="crusaderhome/qwerty"
salah. Solusinya adalah untuk keduanya a) memperbaiki XML dan b) mengkompilasi ulangbalas pertanyaan Anda di tempat pertama
harus diganti oleh
karena homeads bukan anak beranda. Saya pikir ini akan berhasil.
sumber
Saya mendapat masalah yang sama dan menyelesaikannya dengan mengganti kode berikut di config.xml
untuk ini
Itu harus menyelesaikan masalah.
sumber