Magento yeni özel blok modülü


12

Magento 1.8.1.0 sürümünü kullanıyorum .

Yeni bir ana sayfa oluşturmak için kullanacağım yeni bir özel blok modülü oluşturmaya çalışıyorum.

  • Ad Alanı: Haçlı
  • Modül: CLHomePage
  • Blok Tipi: haçlı evi
  • Sınıf: Qwerty (şimdilik sadece test sırasında)
  • Tasarım Paketi: haçlı
  • Tema: varsayılan

Şimdiye kadar sahip olduğum şey bu:

\ App \ etc \ modülleri \ Crusader_All.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Crusader_CLHomePage>
            <active>true</active>
            <codePool>local</codePool>
        </Crusader_CLHomePage>
    </modules>
</config>

\ App \ kod \ yerel \ Haçlı \ CLHomePage \ vb \ 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 \ kod \ yerel \ Haçlı \ CLHomePage \ Blok \ Qwerty.php

<?php
class Crusader_CLHomePage_Block_Qwerty extends Mage_Core_Block_Template
{
    // Methods (optional)
}
?>

\ App \ tasarım \ önyüzü \ haçlı \ varsayılan \ düzeni \ 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 \ tasarım \ önyüzü \ haçlı \ varsayılan \ template \ haçlı \ home.phtml

<div id="home">
<p>Home Wrapper</p>
<?php echo $this->getChildHtml('homeads'); ?>
</div>

\ App \ tasarım \ önyüzü \ haçlı \ varsayılan \ template \ haçlı \ homeads.phtml

<p>Adverts</p>

Şimdi, yukarıdakiler yerinde olduğunda, ana sayfam sadece "Home Wrapper" ı gösteriyor, içeriği home.phtmlgörüntüleniyor, ancak içeriği görüntülenmiyor homeads.phtml.

Ben blok türünü değiştirirseniz homeadsiçin core/templateçalıştığını, ve ben de "Ev Sarıcısını" ve "Reklamlarının" bölümüne bakın. Sorunun yeni blok tipime (haçlı evi denir) referansla ilgili bir şey olduğunu biliyorum.

Burada neyi yanlış yapıyorum ..?

DÜZENLE

Yanıtlardaki önerilerden sonra, bazı dosyaları aşağıdaki gibi güncelledim, ancak yine de çalışmıyor:

\ App \ etc \ modülleri \ Crusader_Home.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Crusader_Home>
            <active>true</active>
            <codePool>local</codePool>
        </Crusader_Home>
    </modules>
</config>

\ App \ kod \ yerel \ Haçlı \ Başlangıç ​​\ vb \ 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 \ kod \ yerel \ Haçlı \ Başlangıç ​​\ Blok \ Qwerty.php

<?php
class Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template
{
    // Methods (optional)
}
?>

\ app \ design \ frontend \ crusader \ default \ layout \ local.xml (daha önce denediğim iç içe bloklar yerine yalnızca bir blok kullanacak şekilde basitleştirildi)

<?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 \ tasarım \ önyüzü \ haçlı \ varsayılan \ template \ haçlı \ home.phtml

<p>Home</p>

Bu yüzden hala hiçbir şeyin göstermediği bir pozisyondayım.

@FabianBlechschmidt tarafından istendiğinde, günlükleri açtım ve bu, exception.log dosyasında gösterilir:

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}

Ne olduğu hakkında herhangi bir fikir .. ??

EDIT No 2

@Malachy Cevabı buldu ... Derleyiciydi. Derleyiciyi devre dışı bıraktım ve şimdi çalışıyor gibi görünüyor.


Bir yerde bir yazım hatası olduğunu varsayıyorum, dosya adlarının büyük / küçük harflerini kontrol edin. Dosyalar iyi görünüyor. Yapılandırma önbelleğini temizlediniz mi?
Fabian Blechschmidt

@FabianBlechschmidt Büyük / küçük harfimi kod ve dosya adlarında kontrol ettim - bana iyi geliyor. Yukarıdaki her şey dosyalarımdan yapıştırıldı. Şu anda tüm önbelleği kapattım ve tüm önbelleği temizledim ve tekrar denedim - yine de çalışmıyor.
Stephen Son

System.log ve exception.log dosyalarını kontrol ettiniz mi? İçinde hiçbir şey yoksa, MAge_Core_Model_Config-> getGroupedClassName () 'de hata ayıklama başlar. Bunun yanında: Lütfen büyük hata ayıklama eğitimine bir göz atın ve rapor verin.
Fabian Blechschmidt

Daha önce günlükleri kullanmadım. Şimdi onları etkinleştirdim ve exception.log gösteriyor:exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
Stephen Son

Modül adını buradaki diğer cevaba uygun olarak güncelledim, dolayısıyla blok tipi adı (CLHomePage -> Home).
Stephen Son

Yanıtlar:


11

Tüm XML olayını zor buluyorum, bu yüzden burada amacınıza sempati duyuyorum.

Bana sınıf adınız ve blok XML'nizle bir tutarsızlık varmış gibi geliyor

yani

class Crusader_CLHomePage_Block_Qwerty extends Mage_Core_Block_Template

ve

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

Blok tipiyle başlayalım ve geriye doğru çalışalım. Sanırım burada böyle bir şey görmeyi beklerdim

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

ve bu tür Magento'yu sınıfa yönlendirir

Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template

Bu yapışmada geriye doğru çalışmaya devam ederken, app \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml dosyasının benzer bir şeye değiştirilmesi gerekir.

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

Magento'yu 'Crusader_Home_Block_ *' ile başlayan tüm sınıflara yönlendirir. Ve şimdi modülünüzü Crusader_CLHomePage yerine Crusader_Home olarak yeniden adlandırmanız ve klasör adlarını buna göre değiştirmeniz gerektiğini düşünüyorum ...

VE / AMA Modül adınızı değiştirmenizi kesinlikle öneririm. Sadece şimdiye kadar kullanmak tek modül adı değil üç başında büyük harf ve ya isim ortasında büyük harf koymayın.

Modül oluşturmak için kullanılabilecek bazı araçlara bakmak isteyebilirsiniz. Onları yazım hatalarından kaçınmak için çok yararlı buluyorum. Bunu MGT Commerce'deki çok akıllı insanlar tarafından kullanıyorum (yanında basitlik var) ve bu her şeyi kapsayan ve Silk Software'in şaşırtıcı bir kodlama parçası .

*** Aşağıdaki yorumları takip edin

Ayrıca hata günlüğüne göre Magento sınıf dosyanızı bulamıyorum sorun olduğunu düşünüyorum. Bu nedenle önbelleklerin, özellikle XML önbelleğinin yenilendiğini veya kapatıldığını ve derleyicinin kapalı veya yeniden etkinleştirildiğini iki kez kontrol edin .


teşekkürler, önerilerini denedim. Modülümü 'Ana Sayfa' olarak yeniden adlandırdım ve tüm referansları ve klasörleri güncelledim. Hala çalışmıyor. Değişimi göstermek için sorumu düzenleyeceğim.
Stephen Son

1
Kesinlikle daha iyi görünüyor. Bir yerlerde hala sinsi bir yazım hatası olup olmadığını merak ediyorum. Hata günlüğüne göre, sorunun Magento'nun sınıf dosyanızı bulamadığını düşünüyorum. Bu yüzden önbelleklerin esp. XML önbelleği ve derleyici kapalı veya yeniden etkinleştirildi. Dosya izni sorunu olmaz mıydı?
Malachy

1
Sihirli kelimeden bahsettiniz - Complier ... Complier'ı devre dışı bıraktım ve şimdi çalışıyor gibi görünüyor. Teşekkür ederim! Bunu bir cevap olarak eklerseniz, sizin için kabul edeceğim! :-)
Stephen Geçen

Aslında, sadece derleyici değildi . Orijinal XML'niz <block type="crusaderhome/qwerty"yanlış. Çözelti XML doğru) her iki a olan ve b) yeniden derlemek
Malachy'nin

-1

ilk etapta sorunuzu cevaplayın

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

ile değiştirilmelidir

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

çünkü homeads ana sayfanın alt öğesi değildir. Bunun işe yarayacağını düşünüyorum.


Teşekkürler! Bunu daha önce hiç şanssız denemiştim. Blok türü çekirdek / şablon (benim özel blok türü yerine) olduğunda üst / alt şey iyi çalışıyordu, bu yüzden benim sorunum blok yerleşimi değil.
Stephen Son

-1

Aynı sorunu aldım ve config.xml dosyasında aşağıdaki kodu değiştirerek çözdüm

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

buna

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

Sorunu çözmeli.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.