Cargar js en pie de página en Magento

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

Usé el código anterior para cargar js en el pie de página. Pero Magento arroja un error como

Método no válido Mage_Page_Block_Html_Footer :: addItem (Array ([0] => skin_js [1] => js / fabric / tool / controller_tool.js))

Necesito cargar js en el pie de página. Cómo superar este problema.

Vivek Aasaithambi
fuente

Respuestas:

8

Actualmente, el bloque de pie de página de Magento no ha sido diseñado para agregar javascripts.

Intenté hace un tiempo refactorizar Magento y el bloque de pie de página para cargar cada JS en el pie de página en lugar del encabezado, pero la forma en que se llaman las llamadas JS dentro de las plantillas hace que sea muy difícil hacer que esto funcione.

Mi sugerencia para solucionar su problema es actualizar su diseño de esta manera:

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

Cree un fabric/tool/controller_tool_js.phtmlarchivo en su carpeta de plantillas con el siguiente código:

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

Avísame si eso funciona.

Raphael en Digital Pianism
fuente
11

El pie de página no tiene estas funcionalidades, solo las headtiene ya que este bloque es del tipo page/html_headque contiene estos métodos.

Puede lograr esto colocando la <script src=...></script>etiqueta JS dentro de una plantilla ( .phtmlarchivo) e incluirla como un core/templatebloque:

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

También podría agregarlo a través de un core/textbloque:

<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>
7ochem
fuente
2

Solo quiero decirte por qué addItemno trabajar enreference name="footer"

Cuando lo uses reference name="footer", llamará a este bloque

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

que encontrarás page.xmlen tu tema.

significa que verificará el addItemmétodo / función en esa clase de bloque o en su clase principal, pero esta función no está allí, es por eso que no funcionará y arrojará una excepción.

Murtuza Zabuawala
fuente
2

<reference name="footer">No funciona en mi caso. He encontrado un bloque más apropiado para js llamado 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>

O a través de una plantilla separada. ruta: design / adminhtml / default / default / template / sales / order / js.phtml:

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

Utilicé un método diferente para lograr lo que podrías estar buscando lograr. En lugar de torcer el brazo de magento, simplemente cargo mi script en la cabeza, pero configuro un DOMContentLoadedoyente de eventos (no compatible con ie8) para que realice mis tareas.

app / design / frontend / base / default / layout / 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>

app / code / community / NameSpace / Module / 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 / Module / entry.js

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

Puede agregar un nuevo bloque en 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>

luego agregue archivos JS y CSS en cualquier layout.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>

Cree un archivo .phtml en la página / html / footerjscss.phtml y agregue lo siguiente

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

Ahora llame al bloque en la plantilla de página "3columns.phtml" y etc. necesitará generar este bloque antes de la etiqueta:

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

Consulte el código aquí: http://blog.rahuldadhich.com/magento-load-css-js-footer/

Rahul Dadhich
fuente