Magento में पाद लेख में लोड करें


12
<reference name="footer">
    <action method="addItem">
        <type>skin_js</type>
        <file>js/fabric/tool/controller_tool.js</file>
    </action>
</reference>

मैंने पाद लेख में js लोड करने के लिए कोड का उपयोग किया है। लेकिन Magento की तरह त्रुटि फेंकता है

अमान्य विधि Mage_Page_Block_Html_Footer :: addItem (सरणी ([0] => skin_js [1] => js / कपड़े / उपकरण / नियंत्रक_tool.js)

मुझे पाद लेख में js लोड करने की आवश्यकता है। इस मुद्दे को कैसे दूर किया जाए।

जवाबों:


8

वर्तमान में Magento के पाद लेख ब्लॉक को javascripts जोड़ने के लिए डिज़ाइन नहीं किया गया है।

मैंने कुछ समय पहले कोशिश की थी कि मैगेंटो और पाद लेख ब्लॉक को हेडर के बजाय फुटर में लोड करने के लिए हर जेएस को लोड किया जाए लेकिन जिस तरह से जेएस कॉल को टेम्प्लेट के अंदर बुलाया जाता है वह इस काम को प्राप्त करने के लिए बहुत कठिन बनाता है।

आपका मुद्दा ठीक करने का मेरा सुझाव इस तरह से अपने लेआउट को अद्यतन करना है:

<reference name="before_body_end">
    <block type="core/template" name="controller_tool_javascript" template="fabric/tool/controller_tool_js.phtml"/>
</reference>

fabric/tool/controller_tool_js.phtmlनिम्नलिखित कोड के साथ अपने टेम्पलेट फ़ोल्डर में एक फ़ाइल बनाएँ :

<script type="text/javascript" src="<?php echo $this->getSkinUrl('js/fabric/tool/controller_tool.js') ?>"></script>

मुझे बताएं कि क्या वह काम करता है।


11

पाद लेख में ये कार्य नहीं हैं, केवल headयह ब्लॉक प्रकार का है page/html_headजो इन विधियों को रखता है।

आप जेएस <script src=...></script>टैग को एक टेम्प्लेट ( .phtmlफ़ाइल) के अंदर रखकर इसे प्राप्त कर सकते हैं और इसमें एक core/templateब्लॉक के रूप में शामिल कर सकते हैं :

<reference name="footer">
    <block type="core/template" name="fabric_controller_tool_js" template="fabric/controller_tool_js.phtml" />
</reference>

इसके अलावा आप इसे एक core/textब्लॉक के माध्यम से जोड़ सकते हैं :

<reference name="footer">
    <block type="core/text" name="fabric_controller_tool_js">
         <action method="setText">
             <text><![CDATA[<script src="/js/fabric/tool/controller_tool.js"></script>]]></text>
         </action>
    </block>
</reference>

2

बस आपको यह बताना चाहिए कि addItemकाम क्यों नहीं करना चाहिएreference name="footer"

जब आप उपयोग reference name="footer"करेंगे तब यह इस ब्लॉक को कॉल करेगा

<block type="page/html_footer" name="footer" as="footer" template="page/html/footer.phtml"> 

जो आपको page.xmlअपने विषय में मिलेगा ।

तो इसका मतलब है कि यह addItemउस ब्लॉक वर्ग या उनके मूल वर्ग में विधि / कार्य की जांच करेगा , लेकिन यह फ़ंक्शन नहीं है, इसलिए यह काम नहीं करेगा और यह अपवाद फेंक देगा।


2

<reference name="footer">मेरे मामले में काम नहीं करता है। मुझे js के लिए अधिक उपयुक्त ब्लॉक मिला है js:

<reference name="js">
    <block type="core/text" name="fabric_controller_tool_js">
        <action method="setText">
            <text><![CDATA[<script src="/js/fabric/tool/controller_tool.js"></script>]]></text>
        </action>
    </block>
</reference>

या अलग टेम्पलेट के माध्यम से। पथ: डिज़ाइन / व्यवस्थापक / डिफ़ॉल्ट / डिफ़ॉल्ट / टेम्पलेट / बिक्री / आदेश / js.phtml:

<reference name="js">
    <block type="core/template" name="fabric_controller_tool_js" template="sales/order/js.phtml" />
</reference>

1

आपने जो हासिल करना चाहा है, उसे हासिल करने के लिए मैंने एक अलग तरीके का इस्तेमाल किया। मैजेंटो की बांह को मोड़ने के बजाय, मैं सिर्फ अपनी स्क्रिप्ट को सिर में लोड करता हूं, लेकिन एक DOMContentLoadedइवेंट श्रोता ( यानी 8 में समर्थित नहीं) सेट करता हूं, जो मेरे कार्यों को करता है।

एप्लिकेशन / डिजाइन / दृश्यपटल / आधार / डिफ़ॉल्ट / लेआउट / namespace_module.xml

<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.0.1">
  <default>
    <reference name="head">
      <action method="addJs">
        <script>NameSpace/Module/entry.js</script>
      </action>
    </reference>
  </default>
</layout>

एप्लिकेशन / कोड / समुदाय / namespace / मॉड्यूल / etc / config.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <modules>
    <NameSpace_Module>
      <version>0.0.1</version>
    </NameSpace_Module>
  </modules>
  <frontend>
    <layout>
      <updates>
        <module>
          <file>namespace_module.xml</file>
        </module>
      </updates>
    </layout>
  </frontend>
</config>

जे एस / namespace / मॉड्यूल / entry.js

document.addEventListener("DOMContentLoaded", function(event) {
  // do something
});

1

आप page.xml में नया ब्लॉक जोड़ सकते हैं

<block type="core/text_list" name="before_body_end" as="before_body_end" translate="label">
    <block type="page/html_head" name="footerjscss" as="footerjscss" after="-" template="page/html/footerjscss.phtml"/>
</block>

फिर किसी भी लेआउट में जेएस और सीएसएस फ़ाइलें जोड़ें। xml

<reference name="footerjscss">
    <action method="addItem"><type>skin_js</type><name>js/slideshow.js</name></action>
    <action method="addItem"><type>skin_css</type><name>css/madisonisland.css</name><params/><if/></action>
</reference>

पेज / html / footerjscss.phtml में .phtml फ़ाइल बनाएँ और निम्नलिखित जोड़ें

<?php echo $this->getCssJsHtml() ?>

अब पेज टेम्पलेट “3columns.phtml” में ब्लॉक को कॉल करें और आदि आपको टैग से पहले इस ब्लॉक को आउटपुट करना होगा:

<?php echo $this->getChildHtml('before_body_end') ?>

यहां देखें कोड: http://blog.rahuldadhich.com/magento-load-css-js-footer/

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