Google CDN jQuery พร้อม Local Fallback ใน Magento Layout XML


18

ฉันได้ทำสิ่งต่อไปนี้เพื่อรวม jQuery จาก Google CDN ใน Magento:

<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 - ดีกว่า หากนี่ยังไม่ออกฉันก็อยากจะสร้างมันขึ้นมา

  • มีส่วนขยายแบบ go-to ใดบ้างที่จัดการสิ่งนี้โดยที่ฉันไม่ต้องบูตเอง

1
หนึ่งโมดูลชุมชนที่ง่ายมากที่จะรวม JQuery (semi-link-link): github.com/netz98/N98_BaseJQuery - มันรวมเฉพาะ JQuery ในพื้นที่เท่านั้น ความคิดทาง CDN นั้นดีรู้สึกฟรีเพื่อปรับปรุงผ่านการร้องขอแบบดึง :-)
อเล็กซ์

ไม่อยากรู้อยากเห็น: CDN ไม่น่าเชื่อถือหรือทำไมจึงจำเป็นต้องใช้ทางเลือกสำรอง? คุณมีประสบการณ์เชิงปฏิบัติแบบไหน
อเล็กซ์

2
บางประเทศ (อิหร่าน, ซีเรียและอื่น ๆ ) อาจบล็อก Google และ Google CDN ในบางครั้ง นี่คือประสบการณ์ส่วนตัวของฉัน ฉันเคยเห็นสิ่งต่าง ๆ เช่นเวลาตอบสนองที่สิ่งนี้ลดน้อยลง
philwinkle

เข้าใจ. ดังนั้นมันจะเจ๋งถ้าคุณสามารถช่วยแก้ปัญหาให้กับโมดูล
อเล็กซ์

เยี่ยมมาก - ฉันไม่เห็นโมดูล 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และเพิ่มทุกสิ่งที่คุณต้องการ (ถ้ามันเป็นมากกว่าหนึ่งไฟล์) เพื่อลบออกได้ง่ายขึ้นในหน้าอื่น ๆ
Fabian Blechschmidt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.