Magento के नए कस्टम ब्लॉक मॉड्यूल


12

मैं Magento संस्करण 1.8.1.0 का उपयोग कर रहा हूं

मैं एक नया कस्टम ब्लॉक मॉड्यूल बनाने की कोशिश कर रहा हूं, जिसका उपयोग मैं एक नया होम पेज बनाने में करूंगा।

  • नेमस्पेस: क्रूसेडर
  • मॉड्यूल: CLHomePage
  • ब्लॉक प्रकार: धर्मयुद्ध घर
  • क्लास: क्वर्टी (अभी परीक्षण करते समय)
  • डिजाइन पैकेज: क्रूसेडर
  • थीम: डिफ़ॉल्ट

अभी तक मेरे पास इतना ही है:

\ एप्लिकेशन \ आदि \ मॉड्यूल \ Crusader_All.xml

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

\ एप्लिकेशन \ कोड \ स्थानीय \ योद्धा \ CLHomePage \ आदि \ 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>

\ एप्लिकेशन \ कोड \ स्थानीय \ योद्धा \ CLHomePage \ ब्लॉक \ Qwerty.php

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

\ अनुप्रयोग \ डिजाइन \ दृश्यपटल \ जेहादी \ डिफ़ॉल्ट \ लेआउट \ 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>

\ अनुप्रयोग \ डिजाइन \ दृश्यपटल \ जेहादी \ डिफ़ॉल्ट \ टेम्पलेट \ जेहादी \ home.phtml

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

\ अनुप्रयोग \ डिजाइन \ दृश्यपटल \ जेहादी \ डिफ़ॉल्ट \ टेम्पलेट \ जेहादी \ homeads.phtml

<p>Adverts</p>

अब, उपरोक्त जगह के साथ, मेरा होम पेज सिर्फ "होम रैपर" दिखाता है, इसलिए सामग्री home.phtmlप्रदर्शित होती है, लेकिन नहीं की सामग्री homeads.phtml

अगर मैं के लिए ब्लॉक प्रकार बदलने homeadsके लिए core/template, यह काम करता है, और मैं दोनों "होम आवरण" और "विज्ञप्ति" देखें। इसलिए मुझे पता है कि समस्या मेरे नए ब्लॉक प्रकार (जिसे क्रूसेड होम कहा जाता है) के संदर्भ में कुछ करना है।

मुझसे यहां क्या गलत हो रहा है..?

संपादित करें

उत्तर में सुझाव के बाद, मैंने कुछ फ़ाइलों को निम्नानुसार अद्यतन किया है, लेकिन यह अभी भी काम नहीं करता है:

\ एप्लिकेशन \ आदि \ मॉड्यूल \ Crusader_Home.xml

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

\ एप्लिकेशन \ कोड \ स्थानीय \ योद्धा \ होम \ आदि \ 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>

\ एप्लिकेशन \ कोड \ स्थानीय \ योद्धा \ होम \ ब्लॉक \ Qwerty.php

<?php
class Crusader_Home_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="crusader_home/qwerty" name="homepage" template="crusader/home.phtml" />
        </reference>
    </cms_index_index>
</layout>

\ अनुप्रयोग \ डिजाइन \ दृश्यपटल \ जेहादी \ डिफ़ॉल्ट \ टेम्पलेट \ जेहादी \ home.phtml

<p>Home</p>

इसलिए मैं अभी भी ऐसी स्थिति में हूं जहां कुछ भी नहीं दिखता है।

@FabianBlechschmidt द्वारा संकेत दिए जाने के बाद, मैंने लॉग ऑन किया है, और यह अपवाद को दर्शाता है।

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}

किसी भी विचार क्या हो रहा है .. ??

EDIT नंबर 2

@ मालची को जवाब मिला ... यह कंपाइलर था। मैंने कंपाइलर को अक्षम कर दिया है और यह अब काम करने लगता है।


मुझे लगता है, आपके पास एक टाइपो कहीं है, चेक अप / फ़ाइल नाम का लोअरकेस। फाइलें ठीक दिखती हैं। क्या आपने कॉन्फिग कैश को साफ किया है?
फेबियन ब्लेसश्मिट

@FabianBlechschmidt मैंने कोड और फ़ाइल नामों में अपना अपरकेस / लोअरकेस चेक किया है - मुझे ठीक लगता है। मेरी फ़ाइलों से ऊपर सब कुछ चिपकाया गया है। मेरे पास इस समय सभी कैश बंद हैं, और मैंने अभी-अभी सभी कैश को साफ़ किया है और फिर से कोशिश की है - फिर भी काम नहीं करता है।
स्टीफन लास्ट

क्या आपने system.log और अपवाद की जाँच की है। अगर इसमें कुछ नहीं है, तो मैं MAge_Core_Model_Config-> getGroupedClassName () में डिबगिंग शुरू करूंगा। इसके अलावा: कृपया महान डीबगिंग ट्यूटोरियल में एक नज़र डालें और वापस रिपोर्ट करें।
फैबियन ब्लेसश्मिड्ट

मैंने पहले लॉग का उपयोग नहीं किया है। मैंने उन्हें अभी सक्षम किया है, और अपवाद.लॉग दिखा रहा है:exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
स्टीफन लास्ट

मैंने मॉड्यूल नाम को अन्य उत्तर के साथ यहां अपडेट किया है, इसलिए ब्लॉक प्रकार का नाम (CLHomePage -> Home)।
स्टीफन लास्ट

जवाबों:


11

मुझे पूरी एक्सएमएल चीज मुश्किल लग रही है इसलिए मुझे यहां आपके कारण सहानुभूति है।

यह मुझे लगता है कि आपके वर्ग के नाम और आपके ब्लॉक एक्सएमएल के साथ एक विसंगति है

अर्थात

class Crusader_CLHomePage_Block_Qwerty extends Mage_Core_Block_Template

तथा

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

चलो ब्लॉक प्रकार के साथ शुरू करते हैं और पिछड़े काम करते हैं। मुझे लगता है कि मैं यहां कुछ देखने की उम्मीद करूंगा

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

और वह प्रकार मैगेंटो को कक्षा में संदर्भित करेगा

Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template

इस डील पर पिछड़े काम करना जारी रखते हुए, फ़ाइल ऐप \ कोड \ स्थानीय \ क्रूसेडर \ सीएचओएमपेज \ आदि \ config.xml को कुछ इस तरह से संशोधित करने की आवश्यकता होगी

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

यह 'Crusader_Home_Block_ *' शुरू करने वाले सभी वर्गों के लिए Magento को इंगित करता है। और अब मुझे लगता है कि आपको Crusader_CLHomePage के बजाय अपने मॉड्यूल Crusader_Home का नाम बदलने और तदनुसार फ़ोल्डर नाम बदलने की आवश्यकता है ...

और / लेकिन मैं दृढ़ता से आपको अपना मॉड्यूल नाम बदलने की सलाह देता हूं। केवलमॉड्यूल नाम की शुरुआत में एक कैपिटल लेटरका उपयोग करेंतीन नहीं और नाम के बीच में कैपिटल लेटर्स भी न रखें।

आप मॉड्यूल उत्पन्न करने के लिए उपलब्ध कुछ उपकरणों पर गौर करना चाहते हैं। टाइपिंग त्रुटियों से बचने के लिए मैं उन्हें बहुत उपयोगी मानता हूं। मैं एमजीटी कॉमर्स में बहुत चालाक लोगों द्वारा इसका उपयोग करता हूं (इसकी तरफ सरलता है) और यह एक सभी को शामिल करने और सिल्क सॉफ्टवेयर द्वारा कोडिंग का एक आश्चर्यजनक टुकड़ा है

*** नीचे टिप्पणी के बाद EDIT

इसके अतिरिक्त त्रुटि लॉग के आधार पर मुझे लगता है कि समस्या यह है कि Magento आपकी क्लास फ़ाइल नहीं ढूँढ सकता है। तो कैश को दोबारा चेक करें या रिफ्रेश करें, विशेष रूप से XML कैश, और यह कि कंपाइलर बंद है या फिर से सक्षम है


धन्यवाद, मैंने आपके सुझाव की कोशिश की है। मैंने अपने मॉड्यूल का नाम बदलकर 'होम' कर दिया है और सभी संदर्भों और फ़ोल्डरों को अपडेट कर दिया है। फिर भी काम नहीं करता है। मैं परिवर्तन दिखाने के लिए अपने प्रश्न को संपादित करूँगा।
स्टीफन लास्ट

1
यह निश्चित रूप से बेहतर दिखता है। मुझे आश्चर्य है कि अगर अभी भी कहीं एक डरपोक टाइपिंग त्रुटि है। त्रुटि लॉग के आधार पर मुझे लगता है कि समस्या यह है कि मैगेंटो आपकी क्लास फाइल नहीं ढूंढ सकता है। तो डबल चेक कैश ताज़ा या जासूसी कर रहे हैं। XML कैश और कंपाइलर बंद या फिर से सक्षम है। यह एक फ़ाइल अनुमति मुद्दा नहीं होगा?
Malachy

1
आपने जादू शब्द का उल्लेख किया - कॉम्प्लिएर ... मैंने कॉम्प्लिमेंट को अक्षम कर दिया है और यह अब काम करने लगता है। धन्यवाद! यदि आप इसे उत्तर के रूप में जोड़ते हैं तो मैं इसे आपके लिए स्वीकार करूंगा! :-)
स्टीफन लास्ट

वास्तव में, यह सिर्फ संकलक नहीं था । आपका मूल XML <block type="crusaderhome/qwerty"गलत है। समाधान दोनों ए) एक्सएमएल को सही और बी) फिर से संकलित है
मैलाची

-1

अपने प्रश्न का उत्तर पहले स्थान पर दें

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

द्वारा प्रतिस्थापित किया जाना चाहिए

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

क्योंकि होमहेड मुखपृष्ठ का बच्चा नहीं है। मुझे लगता है कि यह काम करेगा।


धन्यवाद! मैंने कोशिश की थी कि पहले कोई किस्मत साथ न दे। अभिभावक / बच्चे की बात ठीक काम कर रही थी जब ब्लॉक प्रकार कोर / टेम्पलेट (मेरे कस्टम ब्लॉक प्रकार के बजाय) था, इसलिए मेरी समस्या ब्लॉक प्लेसमेंट नहीं है।
स्टीफन लास्ट

-1

मुझे वही समस्या मिली और config.xml में निम्नलिखित कोड को बदलकर इसे हल किया गया

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

इसके लिए

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

यह समस्या को हल करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.