Magento'da altbilgide js yükü


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

Ben altbilgi js yüklemek için yukarıdaki kodu kullanılır. Ama Magento hata veriyor

Geçersiz yöntem Mage_Page_Block_Html_Footer :: addItem (Dizi ([0] => skin_js [1] => js / fabric / tool / controller_tool.js))

Altbilgiye js yüklemem gerekiyor. Bu sorunun üstesinden nasıl gelinir.

Yanıtlar:


8

Şu anda Magento altbilgi bloğu javascripts eklemek için tasarlanmamıştır.

Bir süre önce, üstbilgi yerine altbilgide her JS yüklemek için Magento ve altbilgi bloğunu yeniden düzenleyerek denedim ama JS çağrısının şablonların içinde çağrılması bu çalışmayı çok zorlaştırıyor.

Sorununuzu düzeltmek için önerim, mizanpajınızı şu şekilde güncellemektir:

<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Şablon klasörünüzde aşağıdaki kodla bir dosya oluşturun :

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

Bunun işe yarayıp yaramadığını bana bildirin.


11

Altbilgi bu işlevselliklere sahip değildir, yalnızca headbu blok page/html_headbu yöntemleri barındıran tiptedir .

Bunu, JS <script src=...></script>etiketini bir şablonun ( .phtmldosyanın) içine yerleştirip bir core/templateblok olarak ekleyebilirsiniz :

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

Ayrıca bir core/textblok üzerinden ekleyebilirsiniz :

<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

Sadece neden addItemişe yaramadığını söylemek istiyorumreference name="footer"

Kullandığınızda reference name="footer"bu bloğu çağırır

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

temanızda bulacaksınız page.xml.

bu addItem, o blok sınıfında veya üst sınıfında yöntem / işlevi kontrol edeceği anlamına gelir , ancak bu işlev orada değildir, bu yüzden çalışmaz ve istisna atar.


2

<reference name="footer">benim durumumda çalışmıyor. Js için daha uygun bir blok buldum 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>

Veya ayrı bir şablon aracılığıyla. yol: tasarım / adminhtml / varsayılan / varsayılan / şablon / satış / sipariş / js.phtml:

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

1

Yapmak istediklerinize ulaşmak için farklı bir yöntem kullandım. Magento'nun kolunu bükmek yerine, komut dosyamı kafama yükledim, ancak DOMContentLoadedgörevlerimi gerçekleştiren bir olay dinleyicisi (ie8'de desteklenmiyor) ayarladım .

Uygulamanın / tasarım / kullanıcı arayüzü / baz / default / düzeni / 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>

Uygulamanın / kod / topluluk / NameSpace / Modül / 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>

js / NameSpace'in / Modül / entry.js

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

1

Page.xml dosyasına yeni blok ekleyebilirsiniz

<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>

ardından herhangi bir layout.xml dosyasına JS ve CSS dosyaları ekleyin

<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 sayfasında .phtml dosyası oluşturun ve aşağıdakileri ekleyin

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

Şimdi “3columns.phtml” ve benzeri sayfa şablonlarındaki bloğu çağırın etiketten önce bu bloğu çıkarmanız gerekir:

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

Kodu buraya bakın: http://blog.rahuldadhich.com/magento-load-css-js-footer/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.