Thêm javascript vào đầu trong một số trang nhất định


7

Tôi đang cố gắng thêm một số tập lệnh javascript vào đầu một số trang nhất định trong cửa hàng magento của mình (bây giờ tôi cần một tập lệnh trong các trang sản phẩm và tập lệnh khác khi thanh toán, nhưng tôi sẽ cần nó trong các trang khác trong tương lai: trang chủ, Thể loại...).

Tôi mới biết về Magento và đã đọc khá nhiều về nó, nhưng vẫn không chắc chắn cách thực hiện điều này trong Magento (ví dụ tôi đã thực hiện thành công trong Drupal).

Dường như page.xml (hoặc local.xml) sẽ là nơi thích hợp để đặt các tập lệnh cho phần đầu, nhưng tôi không biết trong các tệp xml đó cho phép "điều kiện" (chỉ hiển thị tập lệnh này trong loại trang này. ..).

Một tùy chọn khác dường như là đặt mã trong head.phtml của mẫu. Điều này sẽ hoạt động, bởi vì nó chấp nhận php ifs, nhưng tôi không biết nên sử dụng mã và biến nào cho từng trường hợp (để hiển thị trong trang sản phẩm hoặc thanh toán hoặc trang chủ, v.v.)

Lựa chọn tốt nhất / sạch nhất cho việc này là gì? Bạn có thể vui lòng cho tôi một ví dụ mã về cách nó sẽ được thực hiện hoặc chỉ cho tôi đến trang tài liệu liên quan không?

Cảm ơn rất nhiều!

Tái bút: Tôi không nghĩ nó có bất kỳ sự khác biệt nào trong vấn đề này, nhưng các mã javascript mà tôi đang cố gắng triển khai là để sử dụng API thử nghiệm nội dung của Google Analytics ( https://developers.google.com/analytics/solutions/ thí nghiệm phía khách hàng )

Câu trả lời:


15

Thêm phần sau vào local.xmltệp bố cục của bạn ( app/design/frontend/{interface}/{theme}/layout/local.xml) ngay dưới <layout>thẻ này:
Đối với các trang sản phẩm

<catalog_product_view>
    <reference name="head">
        <block type="core/text" name="some_name" as="some_name">
            <action method="setText">
                <text><![CDATA[YOUR TEXT GOES HERE]]></text>
            </action>
        </block>
    </reference>
</catalog_product_view>

Đối với trang thanh toán là điều tương tự, ngoại trừ bạn cần thay thế thẻ hàng đầu bằng <checkout_onepage_index>. Vì vậy, phần trên trở thành:

<checkout_onepage_index>
    <reference name="head">
        <block type="core/text" name="some_name" as="some_name">
            <action method="setText">
                <text><![CDATA[YOUR TEXT GOES HERE]]></text>
            </action>
        </block>
    </reference>
</checkout_onepage_index>

nó hoạt động tương tự cho bất kỳ trang nào khác. Bạn chỉ cần biết xử lý trang chính xác (thẻ trên cùng). Đối với chỉ số là cms_index_index, cho giỏ hàng là checkout_cart_index.


cms_index_indextham khảo chỉ trang chủ? Không biết điều đó!
Sander Mangel

@SanderMeach. Đó là những gì tôi biết. Có điều này trong tập tin bố trí cms <cms_index_index translate="label"> <label>CMS Home Page</label> </cms_index_index>. Hoặc là tôi đúng hoặc người khác nói dối tôi.
Marius

Đừng ... tin tưởng ... bất cứ ai ...! đặc biệt là khi đó là tài liệu Magento. Nhưng trong trường hợp này tôi nghĩ bạn đúng: P
Sander Mangel

Nó hoạt động khi tôi đặt chính xác mã của bạn, nhưng khi tôi thay đổi phần "VĂN BẢN CỦA BẠN TẠI ĐÂY" cho mã javascript, tôi sẽ không thực hiện nó mang lại cho tôi "Mảng". Bất kỳ manh mối của những gì có thể đi sai? (hãy cho tôi biết nếu bạn cần mã javascript để trả lời điều này). Cảm ơn một lần nữa! ;)
pedrogon

Nếu bạn có các thẻ html trong mã của bạn, chỉ cần bọc nó <![CDATA[..]]>. Tôi sẽ cập nhật câu trả lời. Nếu vẫn không giải quyết được, hãy thêm mã js vào câu hỏi.
Marius

4

Đó local.xmlsẽ là con đường để đi. Nó được coi là thực hành tốt nhất để chỉ thay đổi và thêm quy tắc ở đó.

Chỉ giải quyết các loại trang nhất định, bố cục XML cung cấp cho bạn các thẻ điều khiển trang. Vì vậy, ví dụ trang sản phẩm là catalog_product_view. Trong trường hợp của bạn, XML bố cục sẽ trông giống như thế này

<?xml version="1.0"?>
<layout version="0.1.0">
    <checkout_onepage_index>
        <reference name="head">
            <action method="addItem"><type>skin_js</type><name>js/your_custom_js.js</name></action>
        </reference>
    </checkout_onepage_index>
    <catalog_product_view>
        <reference name="head">
            <action method="addItem"><type>skin_js</type><name>js/another_custom_js.js</name></action>
        </reference>
    </catalog_product_view>
</layout>

Đối với trang chủ, bạn sẽ cần thêm nó thông qua phần phụ trợ bên dưới các trang CMS và sau đó layout tab, Layout Update XMLkhu vực


Điều đó có thể sẽ hoạt động, nhưng nếu có thể tôi muốn thêm mã javascript trực tiếp vào local.xml (không gọi các tệp js tùy chỉnh). Điều đó có thể không?
pedrogon

sử dụng <block type="core/text">@Marius được cung cấp sẽ thực hiện thủ thuật.
Sander Mangel

Tôi khá chắc chắn <reference name="header">là sai ở đây, nó nên được head.
Louis B.

1
@LouisB. bắn đi, bạn hoàn toàn đúng Cảm ơn bạn đã cho tôi biết!
Sander Mangel

2

bây giờ tôi cần một tập lệnh trong các trang sản phẩm và tập lệnh khác khi thanh toán, nhưng tôi sẽ cần tập lệnh này trong các trang khác trong tương lai: trang chủ, danh mục

Nếu bạn sẽ sử dụng lại cùng một tập lệnh ở một số nơi, sẽ hợp lý khi sử dụng trình điều khiển bố cục tùy chỉnh trong các chủ đề của bạn local.xml(hoặc tệp bố cục cụ thể của chủ đề khác, như được giải thích trong câu trả lời này ) như sau:

<content_experiments> <!-- this is the custom layout handle -->
    <reference name="head">
        <block type="core/text" name="content_experiments">
            <action method="setText">
                <text><![CDATA[
add scripts here

]]></text>
            </action>
        </block>
    </reference>
</content_experiments>

Sau đó, để sử dụng tay cầm này trên các trang sản phẩm và thanh toán :

<catalog_product_view>
    <update handle="content_experiments"/>
</catalog_product_view>
<checkout_onepage_index>
    <update handle="content_experiments"/>
</checkout_onepage_index>

Để sử dụng nó trên tất cả các trang chuyên mục

<catalog_category_view>
    <update handle="content_experiments"/>
</catalog_category_view>

Để sử dụng nó trong danh mục với ID 42 :

<CATEGORY_42>
    <update handle="content_experiments"/>
</CATEGORY_42>

(thay thế thêm <update handle="content_experiments"/>vào trường văn bản cập nhật bố cục tùy chỉnh trong cấu hình thể loại)

ảnh chụp màn hình

Để sử dụng nó trên sản phẩm có ID 42 :

<PRODUCT_42>
    <update handle="content_experiments"/>
</PRODUCT_42>

(thay thế thêm <update handle="content_experiments"/>vào trường văn bản cập nhật bố cục tùy chỉnh trong cấu hình sản phẩm)

ảnh chụp màn hình

...và như thế...

Tất cả các tay cầm bố trí được đặt trực tiếp trong <layout> ... </layout>

Ưu điểm của phương pháp này là nếu bạn muốn thay đổi tập lệnh, bạn chỉ cần thực hiện ở một nơi.


KidCajes quên upvote. Hãy coi đây là +1 từ anh ấy. Kudos :)
Rajeev K Tomy
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.