2012-07-21 11 views
5

के माध्यम से गतिशील रूप से लेआउट बदलता है क्या कोई तरीका है कि हम अपने स्वयं के मॉड्यूल पर सेट किए गए सिस्टम वैरिएबल का उपयोग करके गतिशील रूप से एक Magento पेज (चलो एक उत्पाद श्रेणी पृष्ठ) का लेआउट बदल सकते हैं? मैं अपने खुद के मॉड्यूल व्यवस्थापक कॉन्फ़िगरेशन पैनल के माध्यम से अपने श्रेणी पृष्ठ के डिफ़ॉल्ट लेआउट को सेट करने में सक्षम होना चाहता हूं। इसलिए जब भी मैं किसी निश्चित Magento पृष्ठ के लिए अपना डिफ़ॉल्ट लेआउट बदलना चाहता हूं तो मुझे उन भ्रमित XML लेआउट फ़ाइल से निपटने की ज़रूरत नहीं है।Magento सिस्टम वैरिएबल

मुझे पता है कि, एक PHP फ़ाइल पर, हम उस सिस्टम चर का उपयोग करने के लिए Mage::getStoreConfig('module/scope/...') पर कॉल करके बस अपने मॉड्यूल के सिस्टम वैरिएबल को कॉल कर सकते हैं। लेकिन क्या होगा यदि हम डिफ़ॉल्ट रूप से एक्सएमएल लेआउट फ़ाइल पर सेट किए गए पूरे लेआउट को बदलने के लिए उस सिस्टम वैरिएबल का उपयोग करना चाहते हैं।

मुझे XML लेआउट फ़ाइल पर उस सिस्टम परिवर्तनीय मान को खींचने के किसी भी तरीके को नहीं दिख रहा है।

लेकिन मुझे पूरा यकीन है कि ऐसा करने का एक सही तरीका होना चाहिए। अब तक, इस करीबी सुराग कि मैं

Magento - xml layouts, specify value for ifconfig?

लेकिन, फिर भी मिल गया है है, क्या मैं वास्तव में

हासिल करना चाहते हैं इस की सामग्री है मैं के लिए कोई सीधा जवाब नहीं मिल सकता है मेरी config.xml

<config> 
    <modules> 
     <Prem_Spectra> 
      <version>0.1.0</version> 
     </Prem_Spectra> 
    </modules> 

    <global> 
     <models> 
      <spectra> 
       <class>Prem_Spectra_Model</class> 
      </spectra> 
     </models> 

     <helpers> 
      <prem_spectra> 
       <class>Prem_Spectra_Helper</class> 
      </prem_spectra> 
     </helpers> 

    </global> 
</config> 

उत्तर

10

यह लेआउट एक्सएमएल और आपके सहायक में एक साधारण विधि का उपयोग करके बहुत आसानी से हासिल किया जा सकता है। मुझे यहां पर्यवेक्षक के लिए कोई आवश्यकता नहीं है या कुछ और व्यापक रूप से विस्तृत नहीं है।

<catalog_category_view> 
    <reference name="root"> 
     <action method="setTemplate"> 
      <template helper="yourmodule/switchTemplate" />     
     </action> 
    </reference> 
</catalog_category_view> 

और अपने मॉड्यूल डिफ़ॉल्ट सहायक में निम्नलिखित:

तो, अपने स्वयं के मॉड्यूल की दुकान config मूल्य से सभी श्रेणी के पृष्ठ लेआउट बदलने के लिए अपनी आवश्यकताओं के आधार पर आप अपने लेआउट एक्सएमएल में निम्नलिखित की आवश्यकता होगी

public function switchTemplate() 
{ 
    $template = Mage::getStoreConfig('path_to/yourmodule/config'); 
    return $template; 
} 
+0

धन्यवाद ड्रू ... मैं इसे आज़मा रहा हूं ... लेकिन मुझे यह त्रुटि मिली: घातक त्रुटि: क्लास 'Mage_Prem_Spectra_Helper_Data' डी में नहीं मिला: \ xampp \ htdocs \ magento17 \ app \ Mage.php चालू लाइन 546. मैंने अपने डिफ़ॉल्ट सहायक में फ़ंक्शन जोड़ा है। और <टेम्पलेट सहायक = "Prem_spectra/switchTemplate"> सेट करें। मैं Magento के साथ पूरी तरह से नौसिखिया हूँ ... क्या आप कृपया मुझे बता सकते हैं कि मेरे कार्यान्वयन में क्या गलत है? – Kamal

+0

अभी भी नहीं है। :(यह इस त्रुटि को आउटपुट करता है: घातक त्रुटि: कक्षा 'Mage_Spectra_Helper_Data' में नहीं मिला: \ xampp \ htdocs \ magento17 \ app \ Mage.php लाइन 546 – Kamal

+0

पर आप अपने मॉड्यूल config.xml की सामग्री पोस्ट कर सकते हैं आप अपने सहायक नोड –

-1

हम इतनी 3columns, 2columns, आदि, जड़-तत्व टेम्पलेट के बारे में बात कर रहे हैं? सही बात?

एक पर्यवेक्षक को लागू करें, घटना controller_action_layout_generate_blocks_before को सुनने और उसके बाद पर्यवेक्षक में ब्लॉक हो जाते हैं और सेट टेम्पलेट

Mage::app()->getLayout()->getBlock('root')->setTemplate($myFancyTemplatePath);

यह करना चाहिए।

अन्य विचार, घटना controller_action_layout_load_before पर आज़माएं, लेकिन मुझे लगता है कि यह बहुत जल्दी है।

-2

फेबियन के जवाब के अलावा:

आप शायद श्रेणी 'प्रदर्शन मोड' की कार्यक्षमता बढ़ाने सकता है। controller_action_layout_load_before ईवेंट का उपयोग करके और फिर श्रेणी के प्रदर्शन मोड को पुनर्प्राप्त करें और इसके लिए एक XML अद्यतन हैंडल बनाएं।

$category = Mage::registry('current_category'); 
    $handle = 'category_displaymode_' . strtolower($category->getDisplayMode()); 

    $layout = $observer->getEvent()->getLayout(); 
    $layout->getUpdate()->addHandle($handle); 

इस तरह आप अपने local.xml में लेआउट के सभी प्रकार पूर्व परिभाषित कर सकते हैं और आसानी से व्यवस्थापक श्रेणी में संपादित करें पृष्ठ पर 'प्रदर्शन मोड' ड्रॉपडाउन का समायोजन करके उनके बीच स्विच।

व्यवस्थापक में कुछ tweaking के साथ आप ड्रॉपडाउन में अतिरिक्त प्रदर्शन मोड जोड़ सकते हैं ताकि कस्टम डिस्प्ले मोड xml अद्यतन हैंडल उपलब्ध हो सकें।