Google CDN jQuery với Dự phòng cục bộ trong Bố cục Magento XML


18

Tôi đã thực hiện các thao tác sau để đưa jQuery từ Google CDN vào 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>

Tuy nhiên, khi tôi muốn triển khai nó với một dự phòng cục bộ, hoạt động khá tốt, tôi kết thúc việc thêm nó vào .phtml của mình như vậy:

<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>
  • Có cách nào thanh lịch hơn để làm điều này trong local.xml hơn là chuyển dự phòng vào <text>nút như tôi đang làm jQuery.noConflictkhông?

Chỉnh sửa:

Để thu hút sự chú ý đến phần khác của câu hỏi - có mô-đun cộng đồng nào bao gồm jQuery cho bạn không? Nếu họ có một jQuery cục bộ, điều đó tốt - nếu họ sử dụng Google CDN - thậm chí còn tốt hơn. Nếu điều này không nằm ngoài đó, tôi rất thích tạo ra nó.

  • Có bất kỳ tiện ích mở rộng nào xử lý việc này mà không cần tôi phải tự khởi động nó không?

1
Một mô-đun cộng đồng rất đơn giản để bao gồm JQuery (bán tự liên kết): github.com/netz98/N98_BaseJQuery - nó chỉ bao gồm một JQuery cục bộ. Ý tưởng qua CDN rất hay, vui lòng cải thiện thông qua Pull Requests :-)
Alex

Vì tò mò: CDN không đáng tin cậy hay tại sao lại cần dự phòng? Bạn có loại kinh nghiệm thực tế nào ở đó?
Alex

2
Một số quốc gia (Iran, Syria, et al) đôi khi có thể chặn Google và Google CDN. Đây là kinh nghiệm cá nhân của tôi. Tôi cũng đã thấy những thứ như thời gian chờ phản hồi mà điều này giảm nhẹ.
philwinkle

Hiểu không. Vì vậy, sẽ thật tuyệt nếu bạn có thể đóng góp một giải pháp cho mô-đun.
Alex

Tìm kiếm tuyệt vời - Tôi đã không thấy mô-đun N98 khi tìm kiếm thứ gì đó phù hợp. Tôi nghĩ rằng tôi sẽ đóng góp ở đó. Cảm ơn! Tuy nhiên, nó có thể phải theo <text>phương pháp như mô tả ở trên ... không chắc đó có phải là một giải pháp chấp nhận được hay không. Mô-đun n98 sử dụng một tệp js riêng bao gồm tệp để gọi noConflict, tuy nhiên, tôi cho rằng ...
philwinkle

Câu trả lời:


18

Vào cuối ngày, thực hiện việc này thông qua Bố cục XML là tốt hơn. Tôi đã thấy rằng tùy chọn dự phòng cục bộ được triển khai tốt nhất trong một tuyên bố một dòng được rút gọn với Trình biên dịch đóng cửa của Google.

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

việc này không hiệu quả
fmsthird

2

Tôi đã tìm kiếm rất lâu thông qua mã của các tệp head.phtml và các tệp và khối xung quanh nhưng không có cách nào khác mà không thay đổi các mẫu để tiêm mã vào <head>.

Tôi là một thằng ngốc, bạn đã viết tất cả mọi thứ và tôi giám sát một vài lần <?php echo $this->getChildHtml() ?>trong head.phtml: - /

Vì vậy, tôi sẽ chỉ sử dụng một core/templatekhối và một mẫu cho việc này. Nó dễ đọc, dễ hiểu và dễ quản lý.


Vấn đề tôi đang cố gắng khắc phục là khả năng thêm / xóa khối này khỏi các loại trang và bố cục nhất định mà không cần phải bao gồm phtml một cách mạnh mẽ mỗi lần. Ngay bây giờ, một khối tĩnh đủ, nhưng chỉ bởi vì nó có sẵn từ hầu hết mọi nơi ...
philwinkle

Tôi không thấy vấn đề ở đây. Bạn thêm nó vào <default> và xóa nó, ở mọi nơi mà bạn không muốn có nó, như mọi khối khác. Bạn có thể suy nghĩ về việc thêm một core/text_listvà thêm vào đó tất cả những thứ bạn muốn (nếu nó có nhiều hơn một tệp) để dễ dàng xóa nó trên các trang khác.
Fabian Blechschmidt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.