2012-01-22 13 views
8

सबसे पहले ओवरराइड नहीं कर सकता है, मैं यहां एक और "Magento कोर ओवरराइड" प्रश्न पूछने के लिए क्षमा चाहता हूं, लेकिन मैंने लगभग 10 ट्यूटोरियल का पालन किया और यहां पोस्ट किए गए लगभग सभी समान प्रश्नों को पढ़ा, कोई सफलता नहीं।Magento कोर मॉडल

मुझे कोर मॉडल और कक्षाओं का एक गुच्छा ओवरराइड करना है। कोड काम करता है, क्योंकि मैंने कोर को पहले से ही बदल दिया है (एक परीक्षण Magento साइट में) और यह सही काम किया। लेकिन हर अब और फिर एक Magento अद्यतन उपलब्ध है और यदि हम अपडेट लागू करेंगे तो मेरे सभी परिवर्तन खो जाएंगे। तो मुझे इसके बजाय बेस कोड ओवरराइड करना होगा। मैं अपने सभी मॉड्यूल को सभी आवश्यक कोड में डालना चाहता हूं, क्योंकि मुझे केवल प्रत्येक कक्षा में 1 या 2 कार्यों को ओवरराइड करना है, बाकी को Magento की तरह काम करना चाहिए।

मेरा पहला प्रयास Mage_Sales_Model_Order_Pdf_Invoice कक्षा को ओवरराइड करना था। ठीक है, इसलिए मैंने अपना मॉड्यूल बनाया। फ़ाइल संरचना है:

एप्लिकेशन/कोड/स्थानीय/[नाम स्थान] /Sales/etc/config.xml

एप्लिकेशन/कोड/स्थानीय/[नाम स्थान] /Sales/Helper/Data.php (क्योंकि मैंने कहीं पढ़ा है अगर कोई सहायक वर्ग है कि Magento कभी कभी मॉड्यूल को नहीं पहचानता है इस वर्ग के कुछ नहीं करता है, यह सिर्फ एक खाली वर्ग है। मैं इसे बनाया)

एप्लिकेशन/कोड/स्थानीय /[namespace ]/Sales/Model/Order/Pdf/Invoice.php

एप्लिकेशन/etc/मॉड्यूल/[नाम स्थान] _Sales.xml

[नाम स्थान] _Sales.xml फ़ाइल इस तरह दिखता है:

<?xml version="1.0"?> 
    <config> 
     <modules> 
      <[namespace]_Sales> 
       <active>true</active> 
       <codePool>local</codePool> 
      </[namespace]_Sales> 
     </modules> 
    </config> 

config.xml फ़ाइल इस तरह दिखता है:

< ?xml version="1.0"?> 
    <config> 
    <modules> 
     <[namespace]_Sales> 
      <version>0.1.0</version> 
     </[namespace]_Sales> 
    </modules> 
    <global> 
    <helpers> 
      <sales> 
       <class>[namespace]_Sales_Helper</class> 
      </sales> 
     </helpers> 
     <models> 
      <sales> 
       <rewrite> 
        <order_pdf_invoice>[namespace]_Sales_Model_Order_Pdf_Invoice</order_pdf_invoice> 
       </rewrite> 
      </sales> 
     </models> 
    </global> 
</config> 

और Invoice.php फ़ाइल इस तरह दिखता है:

<?php 

/****I'm adding some different classes here*******************************/ 
include_once Mage::getBaseDir('lib')."/myclass.php"; 
include_once Mage::getBaseDir('lib')."/another_library.php"; 
/********************************************************/ 

class [namespace]_Sales_Model_Order_Pdf_Invoice extends Mage_Sales_Model_Order_Pdf_Invoice 
{ 
    public function getPdf($invoices = array()) 
    { 
     //my code 
    } 


} 

मैं जाने से पहले इसे पहले परीक्षण करना चाहता था और मुझे बदलने वाले सभी अन्य नियंत्रकों और मॉडलों को ओवरराइड करना था।

समस्या यह है कि यह अभी भी मूल मॉडल का उपयोग करता है।

मुझे लगता है कि मॉड्यूल कोड और पथ सही हैं, क्योंकि Magento मेरे कस्टम मॉडल को पाता है। मैंने बैकएंड में जाकर जांच की और सिस्टम-> कॉन्फ़िगरेशन-> उन्नत

मैंने पूरी तरह से कैश साफ़ कर दिया, तो ऐसा नहीं है। (('बिक्री/order_pdf_invoice') दाना :: getModel)get_class, इस रिटर्न Mage_Sales_Model_Order_Pdf_Invoice

मैं मैं कहाँ बनाया पता नहीं है:

मैं निर्धारित करने के लिए क्या मॉडल नियंत्रक में दिया जाता है get_class इस्तेमाल किया एक गलती लेकिन मुझे यकीन है कि मैंने एक बनाया है :(

+1

व्हाईट स्पेस क्यों? '' – Zyava

+0

मैंने उदाहरणों से एक्सएमएल संरचना की प्रतिलिपि बनाई और इसे मेरे कस्टम मॉड्यूल के अनुसार बदल दिया। मुझे नहीं लगता कि सफेद जगह जरूरी है, लेकिन यह भी इस तरह से काम करता है। – itd

उत्तर

7

कुछ गलतियां हैं जिन्हें मैंने सचमुच पाया है।कृपया उन गलतियों को सही: -

सभी फ़ाइल संरचनाओं, जो आपको "local" कोड पूल में विचाराधीन का उल्लेख किया है, एक लापता फ़ोल्डर का नाम "code" अंदर "app" फ़ोल्डर है। इसलिए आपके स्थानीय मॉड्यूल की प्रत्येक फ़ाइल संरचना इस प्रकार होनी चाहिए: "app/code/local/[namespace]/Sales/..."

यदि यह फ़ोल्डर संरचना गलत है, तो आपके [namespace]_Sales मॉड्यूल अपेक्षा के अनुसार काम नहीं कर सकता है।

दूसरी बात, फ़ाइल की सामग्री "config.xml" थोड़ा गलत है। सही हो जाएगा: -

<?xml version="1.0"?> 
<config> 
    <modules> 
    <[namespace]_Sales> 
     <version>0.1.0</version> 
    </[namespace]_Sales> 
    </modules> 

    <global> 
    <helpers> 
     <!-- 
     This node will be the unique identifier of your module, 
     and it will be used every time your code requires referencing your own module. 
     This shouldn't clash with other unique identifiers used in your Magento system. 
     Normally all the characters are kept in small case for this, 
     however, I haven't tried with the upper case. 
     But it will be best to keep your unique identifier in small case only. 
     --> 
     <[namespace]sales> 
     <class>[namespace]_Sales_Helper</class> 
     </[namespace]sales> 
    </helpers> 

    <models> 
     <!-- 
     If this is not provided, then Magento will not know your module's starting part of Model Class Names. 
     --> 
     <[namespace]sales> 
     <class>[namespace]_Sales_Model</class> 
     </[namespace]sales> 
     <sales> 
     <rewrite> 
      <order_pdf_invoice>[namespace]_Sales_Model_Order_Pdf_Invoice</order_pdf_invoice> 
     </rewrite> 
     </sales> 
    </models> 
    </global> 
</config> 

इसके अलावा मुझे नहीं लगता कि आप यहाँ विभिन्न वर्गों को जोड़ने (जो आप "[namespace]_Sales_Model_Order_Pdf_Invoice" वर्ग पीएचपी पेज में किया है) की आवश्यकता होगी है। ऐसा इसलिए है क्योंकि Magento स्वचालित पुस्तकालयों की सभी परिभाषाओं को स्वचालित रूप से लोड करता है (लाइब्रेरी कक्षाओं के कुछ उदाहरण "Varien" और "Zend" हैं)। आपको केवल उन लाइब्रेरी कक्षाओं का ऑब्जेक्ट बनाना होगा और आप विधियों का पूरी तरह से उपयोग करने में सक्षम होंगे।

उम्मीद है कि यह मदद करता है।

+1

हाँ, मैंने सवाल थोड़ा तेज़ और गलत तरीके से लिखा था। मेरी सभी फाइलें ऐप/कोड/स्थानीय फ़ोल्डर में हैं और ऐप/स्थानीय नहीं हैं। मैं आपके अन्य सुझावों को देखूंगा हालांकि, आपकी मदद के लिए धन्यवाद :) – itd

+1

@itd - अधिकांश स्वागत –

+0

धन्यवाद, यह काम करता है। Config.xml फ़ाइल में त्रुटियां थीं, जैसे आपने कहा था। – itd

संबंधित मुद्दे