特定のページの見出しにJavaScriptを追加する


7

magentoストアの特定のページの先頭にいくつかのJavaScriptスクリプトを追加しようとしています(現在、製品ページに1つのスクリプトとチェックアウトの他のスクリプトが必要ですが、将来的には他の別のページにも必要になります:ホームページ、カテゴリ...)。

私はMagentoを使い始めたばかりですが、Magentoでこれをかなり読む方法はありますが、Magentoでこれを行う方法はわかりません(たとえば、Drupalでうまく実行しました)。

page.xml(またはlocal.xml)がスクリプトを配置するのに適切な場所であるようですが、これらのxmlファイルで「条件」を許可することは知りません(この種類のページでのみこのスクリプトを表示します)。 ..)。

別のオプションは、テンプレートのhead.phtmlにコードを配置することです。これはphp ifsを受け入れるので機能するはずですが、それぞれの場合(製品ページ、チェックアウト、またはホームページなどに表示するために)に使用するコードと変数がわかりません。

このための最良/最もクリーンなオプションは何ですか?それを実装する方法のコード例を教えてもらえますか、それとも関連するドキュメントページを示してくれますか?

どうもありがとう!

PS:私はそれがこの問題に影響を与えるとは思わないが、実装しようとしているJavaScriptコードはGoogle Analytics Content Experiments API(https://developers.google.com/analytics/solutions/を使用するためのものです。実験クライアント側

回答:


15

あなたに以下を追加しますlocal.xml(レイアウトファイルapp/design/frontend/{interface}/{theme}/layout/local.xmlの右下)<layout>このタグ:
製品ページについて

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

決済ページの場合も同じですが、一番上のタグをに置き換える必要があります<checkout_onepage_index>。したがって、上記のセクションは次のようになります。

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

他のページでも同じように機能します。あなただけの正しいページハンドル(トップタグ)を知る必要があります。インデックスはcms_index_index、カートはcheckout_cart_indexです。


cms_index_indexホームページのみ参照していますか?知らなかった!
サンダーマンゲル

@SanderMangel。それは私が知っていることです。これはcmsレイアウトファイルにあります<cms_index_index translate="label"> <label>CMS Home Page</label> </cms_index_index>。私は正しいか、誰かが私に嘘をついた。
マリウス

信用しないでください...誰か...!特にMagentoのドキュメントの場合はそうです。P:しかし、この場合、私はあなたがしている権利を考える
サンダーMangel

それは私があなたのコードを正確に置いたときに機能しますが、それを実装したくないjavascriptコードの「YOUR TEXT GOES HERE」の部分を変更すると、「配列」が得られます。何がうまくいかない可能性があるのか​​、手がかりはありますか (これに答えるためにJavaScriptコードが必要かどうかをお知らせください)。再度、感謝します!;)
ペドロゴン2013年

コードにhtmlタグがある場合は、それを囲んでください<![CDATA[..]]>。回答を更新します。それでも解決しない場合は、質問にjsコードを追加します。
マリウス

4

local.xml進むべき道だろう。ルールの変更と追加のみを行うことがベストプラクティスと見なされています。

特定のタイプのページのみをアドレス指定する場合、レイアウトXMLはページハンドルを提供します。たとえば、製品ページはcatalog_product_viewです。あなたの場合、レイアウトXMLは次のようになります

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

ホームページについて、あなたはその後、CMSのページの下のバックエンドを介して、それを追加する必要がありますlayout tabLayout Update XML地域


それはおそらく機能しますが、可能であれば、JavaScriptコードをlocal.xmlに直接追加します(カスタムjsファイルを呼び出さずに)。それは可能ですか?
ペドロゴン2013年

<block type="core/text">@Mariusが提供するthe を使用すると、トリックを実行できます。
サンダーマンゲル

私は<reference name="header">ここが間違っていると確信していますhead
Louis B.

1
@LouisB。シュート、あなたは完全に正しいです。教えてくれてありがとう!
サンダーマンゲル

2

今、私は製品ページに1つのスクリプトとチェックアウトの他のスクリプトが必要ですが、将来的には他の異なるページで必要になります:ホームページ、カテゴリ

同じスクリプトを複数の場所で再利用する場合は、次のように、テーマlocal.xml(またはこの回答で説明されている別のテーマ固有のレイアウトファイル)でカスタムレイアウトハンドルを使用するのが理にかなっています。

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

次に、このハンドルを商品ページとチェックアウトで使用するには

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

すべてのカテゴリページで使用するには

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

ID 42のカテゴリで使用するには:

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

(または<update handle="content_experiments"/>、カテゴリ構成のカスタムレイアウト更新テキストフィールドに追加します)

スクリーンショット

ID 42の製品で使用するには:

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

(または<update handle="content_experiments"/>、製品構成のカスタムレイアウト更新テキストフィールドに追加します)

スクリーンショット

...等々...

すべてのレイアウトハンドルは直接内部に配置されます <layout> ... </layout>

この方法の利点は、スクリプトを変更したい場合に、1か所で変更する必要があることです。


KidCajesは投票するのを忘れていました。これを彼からの+1と考えてください。賞賛:)
Rajeev K Tomy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.