パッケージ内の複数のlocal.xmlレイアウトファイル


13

パッケージには2つのテーマがあるとします。

  • ベース(デフォルトとして設定)
  • 子(メインテーマとして設定)

両方ともレイアウトフォルダーにlocal.xmlが含まれています-子テーマのlocal.xmlのみがロードされるため、ベースlocal.xmlのCSS、JS、またはレイアウトの更新はロードされません。

page.xmlを使用せずに(したがって、local.xmlと同じ機能を継承できるように)、BaseとXMLの両方に対して呼び出されるXMLファイルを作成するにはどうすればよいですか?

これには、使用可能なxmlファイル(例:base-local.xml)を追加するという唯一の目的でモジュールを構築する必要がありますか?

回答:


9

あなたは正しいです、そして、これは複数のテーマを持つサイトのための有効で、使われたアプローチです。異なるストアスコープに適用されるレイアウト更新に使用できる追加の(あまり知られていない、ほとんど使用されない)オプションが2つあります。ストアハンドルとテーマハンドルです。

アクションコントローラーのスーパークラスMage_Core_Controller_Varien_Action(リンク)から

public function addActionLayoutHandles()
{
    $update = $this->getLayout()->getUpdate();

    // load store handle
    $update->addHandle('STORE_'.Mage::app()->getStore()->getCode());

    // load theme handle
    $package = Mage::getSingleton('core/design_package');
    $update->addHandle(
        'THEME_'.$package->getArea().'_'.$package->getPackageName().'_'.$package->getTheme('layout')
    );

    // load action handle
    $update->addHandle(strtolower($this->getFullActionName()));

    return $this;
}

コード「deutsch」および「default」パッケージ、「german」テーマのテーマ構成を持つストアの場合、ほとんどのビューで使用されるため、次のハンドルがほぼすべてのビューに適用されます。

<STORE_deutsch>
<THEME_frontend_default_german>

実装により、これらと同じ方法でこれらのハンドルを利用できます<default />


ああ、それは知っておくと便利です-私のユースケースはあなたが提案しているものとわずかに異なると思います-あなたはまだ「ベース」テーマに1つのlocal.xmlを持っていますが、<THEME_frontend_default_german>を使用して子テーマをターゲットにしますそのベーステーマlocal.xmlから-各子テーマに個別のlocal.xmlがありませんか?それは正しいですか、誤解していますか?
グロ

それでおしまい。残念ながら、ターゲットハンドルは広く適用されるため、「ストアXのcatalog_product_viewページのルートブロックテンプレートを更新する」方法はありません。ただし、ストアXですべてのページにカスタムJSファイルが必要な場合は、を使用できます<STORE_x><action method="addJs" block="head"><file>custom/js.js</file></action></STORE_x>
ベンマーク

どうもありがとうございました。具体的には私が念頭に置いていたものではありませんが、それは興味深い新しい情報です。
グロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.