2011-05-26 12 views
8

में ओवरराइड फ़ंक्शन मैं इसे कॉपी करने और नया निर्माण किए बिना मौजूदा Prestashop मॉड्यूल को बदलना चाहता हूं। मुझे पता है कि Prestashop में .tpl फ़ाइलों को ओवरराइड करना संभव है, लेकिन क्या php कक्षाओं के साथ एक ही काम करना संभव है? उदाहरण के लिए मैं ब्लॉककार्ट को बदलना चाहता हूं ताकि इसे शीर्ष पर लगाया जा सके। चूंकि मूल संस्करण में उस हुक नहीं है, इसलिए मुझे इंस्टॉल() फ़ंक्शन को बदलने की आवश्यकता है! मैं मूल स्रोत नहीं बदल सकता (यह बुरा विचार होगा यह नहीं है ...) फ़ाइल मुझे ब्लॉककार्ट मॉड्यूल को विरासत में इंस्टॉल() फ़ंक्शन को ओवरराइड करने की आवश्यकता है। क्या ऐसा करना संभव है और जहां मुझे उदाहरण मिल सकता है?प्रेस्टैशॉप - मौजूदा prestashop मॉड्यूल

उत्तर

11

मैं अपने स्वयं के ओवरराइड का उपयोग फ्रंटकंट्रोलर क्लास में करता हूं ताकि मॉड्यूल आउटपुट को टीपीएल फाइलों में मनमानी बिंदुओं पर प्रदर्शित किया जा सके - इसका मतलब है कि मॉड्यूल को किसी विशेष हुक का समर्थन करने की आवश्यकता नहीं है। यह एक चतुर प्लगइन के माध्यम से कार्यान्वित किया जाता है, तो आप कर सकते हैं उदाहरण के उपयोग के लिए:

{plugin module='blockcart' hook='rightColumn'} 

ऊपर उत्पादन यह क्या करता है, तो अधिकार स्तम्भ जहां ऊपर टैग डाला जाता है करने के लिए झुका प्रदर्शित होता मॉड्यूल के लिए बाध्य करेगा (हो सकता है जो किसी भी टीपीएल फ़ाइल में कहीं भी)। आप मॉड्यूल को दाएं कॉलम से "अनहूक" कर सकते हैं ताकि यह केवल उस तकनीक को प्रदर्शित करने के लिए कहां प्रदर्शित हो सके। मैंने इसे बड़ी सफलता के साथ एक उत्पादन स्थल पर इस्तेमाल किया है।

वहाँ कम से यह कैसे (आवश्यक कोड के साथ) काम करता है का वर्णन उपलब्ध लेखों की एक श्रृंखला है:

Prestashop 1.4 Plugins

+0

वाह महान समाधान पॉल! –

+0

मैंने हमेशा महसूस किया है कि मॉड्यूल और हुक सिस्टम कई मामलों में काम करता है, कुछ समय हैं जहां यह बहुत ही लचीला है। खुशी हुई कि यह आपको उपयोगी लगा। –

+0

उत्कृष्ट पॉल! वैसे मैं मॉड्यूल के हुक में कुछ पैरामीटर पास कर सकता हूं? धन्यवाद! –

3

प्रेस्टैशॉप 1.4 में आप कोर क्लासेस और मॉड्यूल टेम्पलेट्स को ओवरराइड कर सकते हैं आज मॉड्यूल php फ़ाइल को ओवरराइड करना संभव नहीं है लेकिन हम इस पर काम कर रहे हैं।

1

PrestaShop के संस्करण 1.6.0.11 के बाद से, वहाँ एक नई सुविधा कि डेवलपर्स एक ओवरराइड करने देता है मॉड्यूल के उदाहरण वर्ग।

यह का विस्तार एक मॉड्यूल का उदाहरण वर्ग को ओवरराइड करने के द्वारा एक मॉड्यूल का उदाहरण वर्ग ओवरराइड, आप इसे विस्तार करने के लिए है, विस्तारित वर्ग में एक ही नाम प्रत्यय देने और जोड़ने अवहेलना:

<?php 
if (!defined('_PS_VERSION_')) 
    exit; 
class BlockUserInfoOverride extends BlockUserInfo 
{ 
    public function hookDisplayNav($params) 
    { 
     return '<div class="header_user_info"><a>Test</a></div>'; 
     // return $this->display(__FILE__, 'nav.tpl'); 
    } 
} 

स्रोत: http://build.prestashop.com/howtos/module/how-to-override-modules/

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