Magento에서 바닥 글에 js로드


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

위 코드를 사용하여 바닥 글에 js를로드했습니다. 그러나 마 젠토는 같은 오류를 던집니다

잘못된 메소드 Mage_Page_Block_Html_Footer :: addItem (Array ([0] => skin_js [1] => js / fabric / tool / controller_tool.js))

바닥 글에 js를로드해야합니다. 이 문제를 극복하는 방법.

답변:


8

현재 Magento 바닥 글 블록은 자바 스크립트를 추가하도록 설계되지 않았습니다.

얼마 전에 Magento와 바닥 글 블록을 리팩토링하여 머리글 대신 바닥 글에 모든 JS를로드하려고 시도했지만 템플릿 내에서 JS 호출이 호출되는 방식 으로이 작업을 수행하기가 매우 어려웠습니다.

문제를 해결하기위한 제안은 다음과 같이 레이아웃을 업데이트하는 것입니다.

<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이러한 메소드를 보유하는 유형이므로 수행 해야합니다.

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

또는 별도의 템플릿을 통해. 경로 : 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>

1

나는 당신이 달성하고자하는 것을 달성하기 위해 다른 방법을 사용했습니다. magento의 팔을 비틀 지 않고 스크립트를 헤드에로드하지만 DOMContentLoaded작업을 수행 하는 이벤트 리스너 (ie8에서 지원되지 않음)를 설정했습니다 .

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 / 모듈 /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>

그런 다음 모든 layout.xml에 JS 및 CSS 파일을 추가하십시오.

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.