Magento Layout XML에서 로컬 폴 백이 포함 된 Google CDN jQuery


18

Magento에 Google CDN의 jQuery를 포함시키기 위해 다음을 수행했습니다.

<default>
    <reference name="head">
        <block type="core/text" name="google.cdn.jquery">
            <action method="setText">
                <text><![CDATA[<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script><script type="text/javascript">jQuery.noConflict();</script>]]>
                </text>
            </action>
        </block>
    </reference>
</default>

그러나 로컬 폴백으로 구현하려고 할 때 꽤 잘 작동하므로 .phtml에 다음과 같이 추가합니다.

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
if (!window.jQuery) {
    document.write('<script src="/path/to/your/jquery"><\/script>');
}
</script>
  • 거기에 더 우아한 이 일의 방법 local.xml에 로 대체를 밀어하는 것보다 <text>내가 함께하고있어 같은 노드는 jQuery.noConflict?

편집하다:

질문의 다른 부분에 주목하기 위해-jQuery를 포함하는 커뮤니티 모듈이 있습니까? 로컬 jQuery가 있으면 Google CDN을 사용하는 것이 좋습니다. 이것이 없다면, 나는 그것을 만들고 싶습니다.

  • 직접 부트 스트랩하지 않고도이를 처리 할 수있는 확장 기능이 있습니까?

1
JQuery (반자동 링크)를 포함하는 매우 간단한 커뮤니티 모듈 : github.com/netz98/N98_BaseJQuery- 로컬 JQuery 만 포함합니다. CDN을 통한 아이디어는 훌륭합니다. Pull Requests를 통해 자유롭게 개선하십시오 :-)
Alex

호기심에서 : CDN을 신뢰할 수 없거나 대체가 필요한 이유는 무엇입니까? 어떤 실제 경험이 있습니까?
Alex

2
일부 국가 (이란, 시리아 등)는 때때로 Google 및 Google CDN을 차단할 수 있습니다. 이것은 나의 개인적인 경험이다. 또한 이것이 완화되는 응답 시간 초과와 같은 것을 보았습니다.
philwinkle

이해하다. 따라서 솔루션을 모듈에 제공 할 수 있다면 멋질 것입니다.
Alex

훌륭한 발견-적절한 것을 찾을 때 N98 모듈을 보지 못했습니다. 저기 기여할 것 같아요. 감사! 그러나 그것은 <text>위에 설명 된 방법 과 관련이있을 수 있습니다 ... 수용 가능한 솔루션인지 확실하지 않습니다. N98 모듈은 ... 별도의 JS는 noConflict는하지만, 내 생각 호출하기위한 파일을 포함합니다
philwinkle

답변:


18

하루가 끝나면 Layout XML을 통해이 작업을 수행하는 것이 좋습니다. 로컬 폴백 옵션이 Google Closure Compiler로 축소 된 한 줄로 구현하는 것이 가장 좋습니다.

<default>
    <reference name="head">
        <block type="core/text" name="google.cdn.jquery">
            <action method="setText">
                <text><![CDATA[<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script><script>window.jQuery||document.write('<script src="/path/to/your/jquery.js">\x3c/script>');</script><script>jQuery.noConflict();</script>]]></text>
            </action>
        </block>
    </reference>
</default>

이것은 작동하지 않습니다
fmsthird

2

head.phtml 파일의 코드와 주변의 파일 및 블록을 통해 오랫동안 살펴 보았지만 템플릿을 변경하여 <head>에 코드를 삽입하지 않으면 방법이 없습니다.

내가 바보, 당신은 이미 모든 것을 쓰고 내가 몇 번을 우연히 목격 해요 <?php echo $this->getChildHtml() ?>에서 head.phtml: - /

그래서 나는 core/template이것을 위해 블록과 템플릿을 사용할 것 입니다. 읽기 쉽고 이해하기 쉽고 관리하기 쉽습니다.


내가 극복하려고하는 문제는 매번 phtml을 강제로 포함하지 않고도 언제든지 특정 페이지 유형 및 레이아웃 에서이 블록을 추가 / 제거 할 수 있다는 것입니다. 현재 정적 블록이면 충분하지만 대부분의 곳에서 사용할 수 있기 때문에 만 가능합니다.
philwinkle

여기서 문제가 보이지 않습니다. <default>에 추가하고 원하지 않는 모든 곳에서 다른 모든 블록과 같이 제거하십시오. core/text_list다른 페이지에서 파일을 쉽게 제거하기 위해 a 를 추가하고 원하는 파일을 둘 이상 추가하면 (하나 이상의 파일 인 경우) 생각할 수 있습니다 .
Fabian Blechschmidt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.