Modul blok ubahsuaian baru Magento

12

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.phtmlditampilkan, tetapi bukan konten homeads.phtml.

Jika saya mengubah jenis blok homeadsmenjadi 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.

Stephen Last
sumber
Saya berasumsi, Anda memiliki kesalahan ketik di suatu tempat, periksa huruf besar / kecil dari nama file. File-file terlihat baik-baik saja. Apakah Anda membersihkan cache konfigurasi?
Fabian Blechschmidt
@FabianBlechschmidt Saya sudah memeriksa huruf besar / huruf kecil dalam kode dan nama file - terlihat ok untuk saya. Segala sesuatu di atas disisipkan dari file saya. Saya memiliki semua cache dimatikan saat ini, dan saya baru saja membersihkan semua cache dan mencoba lagi - masih tidak berfungsi.
Stephen Terakhir
Apakah Anda memeriksa system.log dan exception.log? Jika tidak ada apa-apa di dalamnya, saya akan mulai men-debug di MAge_Core_Model_Config-> getGroupedClassName (). Di samping ini: Silakan lihat tutorial debugging yang hebat dan laporkan kembali.
Fabian Blechschmidt
Saya belum pernah menggunakan log sebelumnya. Saya telah mengaktifkannya sekarang, dan exception.log menunjukkan:exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
Stephen
Saya telah memperbarui nama modul sesuai dengan jawaban lain di sini, maka nama jenis blok (CLHomePage -> Home).
Stephen Terakhir

Jawaban:

11

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

class Crusader_CLHomePage_Block_Qwerty extends Mage_Core_Block_Template

dan

    <block type="core/template" name="homepage" template="crusader/home.phtml">
        <block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
    </block>

Mari kita mulai dengan tipe blok dan bekerja mundur. Saya pikir di sini saya akan berharap untuk melihat sesuatu seperti

<block type="crusader_home/qwerty" ...

dan tipe itu akan merujuk Magento ke kelas

Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template

Terus bekerja mundur pada taktik ini, aplikasi file \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml perlu dimodifikasi menjadi sesuatu seperti:

<global>
    <blocks>
        <crusader_home>
            <class>Crusader_Home_Block</class>
        </crusader_home>
    </blocks>
</global>

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 .

Malachy
sumber
terima kasih, saya sudah mencoba saran Anda. Saya telah mengganti nama modul saya menjadi 'Rumah' dan memperbarui semua referensi dan folder. Masih tidak berfungsi. Saya akan mengedit pertanyaan saya untuk menunjukkan perubahan.
Stephen Terakhir
1
Terlihat lebih baik tentunya. Saya ingin tahu apakah masih ada kesalahan pengetikan yang licik di suatu tempat. Berdasarkan log kesalahan saya pikir masalahnya adalah bahwa Magento tidak dapat menemukan file kelas Anda. Jadi periksa kembali apakah cache di-refresh atau tidak. Cache XML dan kompiler dimatikan atau diaktifkan kembali. Itu tidak akan menjadi masalah izin file bukan?
Malachy
1
Anda menyebutkan kata ajaib - Complier ... Saya menonaktifkan complier dan sepertinya berfungsi sekarang. Terima kasih! Jika Anda menambahkan ini sebagai jawaban, saya akan menerimanya untuk Anda! :-)
Stephen Last
Sebenarnya, itu bukan hanya kompiler. XML asli Anda <block type="crusaderhome/qwerty"salah. Solusinya adalah untuk keduanya a) memperbaiki XML dan b) mengkompilasi ulang
Malachy
-1

balas pertanyaan Anda di tempat pertama

    <block type="core/template" name="homepage" template="crusader/home.phtml">
       <block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
    </block>

harus diganti oleh

<block type="core/template" name="homepage" template="crusader/home.phtml"></block>
<block type="crusaderhome/qwerty" name="homeads" as="homeads" 
template="crusader/homeads.phtml" />

karena homeads bukan anak beranda. Saya pikir ini akan berhasil.

Tai
sumber
Terima kasih! Saya telah mencobanya sebelumnya tanpa hasil. Hal induk / anak berfungsi dengan baik ketika jenis blok adalah inti / templat (bukan jenis blok khusus saya) sehingga masalah saya bukan memblokir penempatan.
Stephen
-1

Saya mendapat masalah yang sama dan menyelesaikannya dengan mengganti kode berikut di config.xml

<global>
    <blocks>
        <crusaderhome>
            <class>Crusader_CLHomePage_Block</class>
        </crusaderhome>
    </blocks>
</global>

untuk ini

<global>
    <blocks>
        <crusader_clhomepage>
            <class>Crusader_CLHomePage_Block</class>
        </crusader_clhomepage>
    </blocks>
</global>

Itu harus menyelesaikan masalah.

siddharth
sumber