2012-08-13 10 views
5

मुझे एक ब्लॉक फ़ाइल के अंदर सशर्त रूप से और प्रोग्रामेटिक रूप से एक जेएस फ़ाइल जोड़ने की आवश्यकता है। मैंने इन कोडों के साथ प्रयास किया:Magento में जेएस प्रोग्रामेटिक रूप से कैसे जोड़ें?

if (Mage::getStoreConfig('mymodule/settings/enable')) { 
$this->getLayout()->getBlock('head')->addJs('path-to-file/file1.js'); 
} else { 
$this->getLayout()->getBlock('head')->addJs('path-to-file/file2.js'); 
} 

हालांकि, सेटिंग के बावजूद, इस फ़ाइल में से कोई भी लोड नहीं किया गया है। मैंने भी स्थिति को खत्म करने की कोशिश की और स्पष्ट रूप से केवल एक फ़ाइल लोड की, लेकिन यह अभी भी काम नहीं करता है। मैंने यहाँ क्या गलत किया है?

+1

क्या सशर्त कथन एक साधारण गूंज/प्रिंट के लिए काम करता है? –

+0

आपके उत्तर के लिए धन्यवाद एलन। हां, अगर मैं इसे गूंजता हूं तो सशर्त या तो 0 या 1 प्रदान करता है। हालांकि, मैंने एक पंक्ति को छोड़कर पूरी लाइनों को खत्म करने की कोशिश की: $ यह-> getLayout() -> getBlock ('head') -> addJs ('path-to-file/file1.js'); लेकिन यह अभी भी काम नहीं करता है। पथ जेएस रूट निर्देशिका के बाद है। – user1576748

+1

आप किस ब्लॉक की टेम्पलेट फ़ाइल को कॉल कर रहे हैं? –

उत्तर

18

यहां समस्या संभवतः प्रसंस्करण आदेश में से एक है। मेरा अनुमान है कि हेड ब्लॉक के बाद आपके PHP कोड का मूल्यांकन किया जा रहा है। जबकि आपका कोड हेड ब्लॉक क्लास इंस्टेंस को सफलतापूर्वक अपडेट कर रहा है, यह उस उदाहरण से आउटपुट उत्पन्न होने के बाद हो रहा है।

बेहतर समाधान लेआउट एक्सएमएल में addJs() कॉल जोड़ने के लिए होगा ताकि उन्हें प्रतिपादन से पहले संसाधित किया जा सके। यह अच्छा होगा अगर ifnotconfig विशेषता थी, लेकिन अभी के लिए आप एक सहायक का उपयोग कर सकते हैं।

एक विधि के साथ एक सहायक वर्ग बनाएं जो कॉन्फ़िगरेशन सेटिंग्स के आधार पर स्क्रिप्ट पथ देता है, फिर इसे रिटर्न तर्क के रूप में उपयोग करें।

<?php 
class My_Module_Helper_Class extends Mage_Core_Helper_Abstract 
{ 
    public function getJsBasedOnConfig() 
    { 
     if (Mage::getStoreConfigFlag('mymodule/settings/enable')) { 
      return 'path-to-file/file1.js'; 
     } 
     else { 
      return 'path-to-file/file2.js'; 
     } 
    } 
} 
तब लेआउट एक्सएमएल में

:

<?xml version="1.0"?> 
<layout> 
    <default> 
     <reference name="head"> 
      <action method="addJs"> 
       <file helper="classgroup/class/getJsBasedOnConfig" /> 
       <!-- i.e. Mage::helper('module/helper')->getJsBasedOnConfig() --> 
      </action> 
     </reference> 
    </default> 
</layout> 
+0

बढ़िया! तुम चट्टान हो यह काम करता है, सिवाय इसके कि "if" लाइन पर आपके कोड में एक टाइपो त्रुटि है। कर्ल ब्रैकेट से पहले अनइडेड बंद ब्रैकेट है। वैसे भी, बहुत बहुत धन्यवाद। – user1576748

+1

(1) परीक्षण के खतरे और (2)) जेट-लगी हुई जबकि कोडिंग। सही :-) – benmarks

3
$this->getLayout()->getBlock('head')->addJs('path'); 

यह सही कोड है, यदि आपका पथ सही है तो खोजें।

+0

आपके उत्तर के लिए धन्यवाद। हाँ, रास्ता सही है। यह रूट जेएस फ़ोल्डर के सापेक्ष है। मैंने अपनी जेएस फ़ाइल को उस रूट जेएस फ़ोल्डर (कोई उप फ़ोल्डर) में कॉपी करने की कोशिश की और इसे सीधे इस addJs ('file1.js') की तरह एक्सेस किया; – user1576748

+0

कोड डालने का प्रयास करें: getJsUrl(); ?> jsFile.js "और देखें कि वह कौन सा कोड लिखता है। xml addjs समान है। – Guerra

+1

क्या होगा यदि आप एक पूर्ण पथ उदाहरण जोड़ना चाहते हैं http://somedomain.com/js/some.js – awavi

1

मैं जानता हूँ कि यह एक लंबे समय पहले कहा गया था, लेकिन इस मामले में किसी को इस बात के लिए लग रही है, मैं अपने local.xml में इस का उपयोग करने का सुझाव देते हैं:

<layout> 
    <default> 
     <reference name="head"> 
      <action ifconfig="path/to/config" method="addJs"> 
       <script>pathto/file.js</script> 
      </action> 
     </reference> 
    </default> 
</layout> 

बेशक यह जेएस फाइलों के लिए/जेएस/फ़ोल्डर में स्थित है। यदि आप skin_js या skin_css को जोड़ना चाहते हैं तो उपयुक्त विधि का प्रयोग करें।

पी एस। सीई पर परीक्षण 1.9

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