누구 아는 방법 젠토의 JS 스크립트 태그 등을 모두 가지고합니까 <script type="text/javascript" src="http://sitename.com/js/prototype/prototype.js"></script>
닫는 전에 렌더링 </body>
?
나는 이것을 전에 한 번 시도했지만 addJS 메소드의 라인을 따라 사용할 수없는 곳에서 참조 바닥 글에 있다고 생각되는 오류가 발생했습니다.
누구 아는 방법 젠토의 JS 스크립트 태그 등을 모두 가지고합니까 <script type="text/javascript" src="http://sitename.com/js/prototype/prototype.js"></script>
닫는 전에 렌더링 </body>
?
나는 이것을 전에 한 번 시도했지만 addJS 메소드의 라인을 따라 사용할 수없는 곳에서 참조 바닥 글에 있다고 생각되는 오류가 발생했습니다.
답변:
요청에 따라 다릅니다. 예를 들어, 마지막으로, 나는 Homepage
아무런 문제가 없었던 Magento 상점 에서 모든 프로토 타입 스크립트를 제거했습니다 . 그러나 내가 말했듯이, 그것은 테마, 확장 등에 따라 다릅니다.
스크립트를 이동하려면 :
page.xml
테마 에서 다음 줄을 찾으십시오.
<block type="core/text_list" name="before_body_end" as="before_body_end" translate="label">
그리고 바로 다음을 삽입하십시오.
<block type="page/html_head" name="jsfooter" as="jsfooter" template="page/html/jsfooter.phtml">
<action method="addJs"><script>your_script.js</script></action>
</block>
Magento 1.9의 경우 다음을 사용하십시오.
<block type="page/html_head" name="jsfooter" as="jsfooter" template="page/html/jsfooter.phtml">
<action method="addItem"><type>skin_js</type><name>js/yourskinfile.js</name><params/></action>
</block>
app / design / frontend / [package] / [theme] /template/page/html/jsfooter.phtml에서 템플릿 파일을 생성하고 다음을 입력하십시오.
<?php echo $this->getCssJsHtml() ?>
</body>
태그 를 닫기 직전에 템플릿에 아래를 추가하십시오 .
<?php echo $this->getChildHtml('jsfooter') ?>
core/text_list
이 addJs()
방법을?
태그 이동에는 두 가지 문제가 있습니다. 가장 큰 문제는 어떤 이유로 Magento가 프로토 타입에 의존하는 많은 JS를 <body/>
태그에 직접 주입한다는 것 입니다. 스크립트를 문서의 끝으로 옮기면 (로드 시간에는 좋지만) Magento의 많은 페이지가 손상됩니다.
다른 문제는 실제로하는 것입니다. <move />
태그 또는 유사한 기능 이없는 것 같습니다 . 내가 만든 사용자 지정 스크립트에 대해 수행 한 작업은 이와 같은 스크립트를 추가하는 것입니다. 더 중복 적이지만 작동합니다.
<block type="page/html_head" name="foot.scripts" template="page/template/foot-scripts.phtml">
<action method="addJs"><script>jmax/global-min.js</script></action>
</block>
마 젠토 1.x에서 이것은 바보의 심부름입니다. Magento의 템플릿 파일 전체에서 너무 많은 인라인 스크립트가 너무 많아서에서 핵심 JS 파일을 재배치하면 중단됩니다 <head>
. 잠재적으로 Magento 2에서는이 상황이 변할 것이지만 Magento가 프로토 타입에서 멀어지면서 프로토 타입과 jQuery가 크게 늘어났습니다.
다른 스크립트의 경우 </body>
요소 앞에 배치해야합니다 . Magento의 <action method="addJS|addItem">
XML 을 무시 하고 각 스크립트에 대해 새 템플릿 파일을 만드는 데 도움이된다는 것을 알게되었습니다 . 여기에는 다음과 같은 일반 HTML 스크립트 참조가 포함됩니다.
<script src="<?php echo $this->getSkinUrl('js/hobbiton.js'); ?>"></script>
그런 다음 다음과 같이이 템플릿 파일을 어디에나 포함시킬 수 있습니다 (그리고 여전히 순서를 제어하기 위해 전후에 사용).
<block type="core/template name="jquery.hobbiton" after="-" template="custom/jquery/hobbiton.phtml" />
대부분의 경우 외부 JavaScript를 맨 아래로 옮기는 것으로 충분하지 않습니다. 기본 테마와 같이 인라인 JavaScript가 포함 된 템플릿을 사용하는 경우 모든 종속성 (prototype.js, varien.js, ...)이로드 될 때까지 이러한 템플릿의 실행을 지연해야합니다.
한 가지 방법은 <script>
관찰자를 사용하여 렌더링 된 블록에서 모든 인라인 요소 를 추출 http_response_send_before
하고 외부 스크립트 바로 다음에 끝으로 이동하는 것입니다. 그 동안 인라인뿐만 아니라 모든 스크립트 요소를 이동할 수 있습니다. 이것은 Magento가 의도하지 않은 레이아웃 모델을 통해 이동하는 번거 로움을 덜어줍니다.
Tom Robertshaw는 정규 표현식을 사용하여 응답 HTML을 변경하는 단일 관찰자와 함께 정확하게이 작업을 수행하는 확장을 만들었습니다. https://github.com/bobbyshaw/magento-footer-js
그는 core_block_abstract_to_html_after
이벤트를 사용 하지만 현재 블록이 루트 블록 인 경우에만 조치를 취합니다. 즉, 옵저버가 더 자주 호출되지만 블록 캐싱을 어느 정도 활용해야합니다.
</body>
태그 바로 앞에 모든 것을 맨 아래로 이동 합니다.
자바 스크립트 (및 CSS)를 최적화하고 Google pagespeed 통계 순위를 개선하는 데 도움이되는 mediarox pagespeed 모듈을 적극 권장합니다.
Magento의 html 출력을 구문 분석 한 다음 코드에서 잘라 내기 및 붙여 넣기 작업을 수행하여 javascript를 html 코드의 맨 아래로 이동합니다. 프로세스는 빠르지 만 HTML 변경 사항을 캐시하기 위해 전체 페이지 캐시와 함께 사용하는 것이 가장 좋습니다.
이 모듈의 작동 방식에 대한 자세한 정보는 페이지 속도 순위를 개선하는 데 도움이 될 수 있습니다.
http://blog.gaiterjones.com/magento-google-pagespeed-jscsshtmlminify-optimisation/
Magento v1.6 +의 경우 (이전 버전에서 테스트해야 함);
1- page/html/footer/extras.phtml
이 내용으로 템플릿 파일을 만듭니다 .
<?php echo $this->getCssJsHtml() ?>
2-이 html 노드를 레이아웃 xml에 추가하십시오.
<reference name="before_body_end">
<block type="page/html_head" name="extra_js" as="extraJs" after="-" template="page/html/footer/extras.phtml">
<action method="addItem"><type>skin_js</type><name>js/jquery.min.js</name></action>
</block>
3-그게 다야!
이 다른 스크립트 (product / list.phtml)의 문제로 인해 <script type="text/javascript"> decorateList('category-list', 'none-recursive') </script>
내 페이지 끝에서 일부 JS를 이동해야했습니다.
위에 표시된 내용을 만들 수 없었으므로 달성 할 수있는 다른 방법을 찾았습니다.
Mage/page/Block/Html/Footer.php controller
에서와 동일한 경로로 다시 작성 하여 를 재정의합니다 app/local folder
.
존재하지 않는 경우 생성 할 전체 경로는 다음과 같습니다.
app / local / Mage / page / Block / Html / Footer.php
이 파일에는 Magento의 코어와 같은 폴더 (예 : Mage / page / Block / Html / Head.php)에있는 Head.php의 기능을 추가합니다.
작동시키는 데 필요한 기능은 다음과 같습니다 (분명히 전체 기능, 여기서는 간결한 이름을 나타냅니다).
public function addItem($type, $name, $params=null, $if=null, $cond=null)
{...}
public function addJs($name, $params = "")
{...}
public function getCssJsHtml()
{...}
protected function &_prepareStaticAndSkinElements($format, array $staticItems, array $skinItems, $mergeCallback = null)
{...}
protected function _separateOtherHtmlHeadElements(&$lines, $itemIf, $itemType, $itemParams, $itemName, $itemThe)
{...}
protected function _prepareOtherHtmlHeadElements($items)
{...}
그런 다음 내 사용자 정의 (내 테마의 하나) page / html / footer.phtml에 대한 호출을 추가하십시오.
<?php echo $this->getCssJsHtml() ?>
마지막으로 이제 모든 레이아웃에서 JS를 호출하여 바닥 글에 JS를 추가 할 수 있습니다.
<action method="addJs"><script>yourscript.js</script></action>