5

独自のモジュールに設定されたシステム変数を使用して、Magento ページ (製品カテゴリ ページとしましょう) のレイアウトを動的に変更する方法はありますか? 独自のモジュール管理設定パネルを使用して、カテゴリ ページのデフォルト レイアウトを設定できるようにしたいと考えています。特定の magento ページのデフォルト レイアウトを変更するたびに、これらの紛らわしい XML レイアウト ファイルを処理する必要がないようにします。

phtml ファイルでは、Mage::getStoreConfig('module/scope/...')そのシステム変数を使用するように呼び出すことで、独自のモジュールのシステム変数を簡単に呼び出すことができます。しかし、そのシステム変数を使用して、デフォルトで XML レイアウト ファイルに設定されているレイアウト全体を変更したい場合はどうでしょう。

XML レイアウト ファイルでそのシステム変数の値を取得する方法がわかりません。

しかし、それを行う正しい方法があるに違いないと確信しています。これまでのところ、これは私が持っている最も近い手がかりです

Magento - xml レイアウト、ifconfig の値を指定しますか?

それでも、本当にやりたいことに対する直接的な答えは見つかりませんでした

これは私のconfig.xmlの内容です

<config>
    <modules>
        <Prem_Spectra>
            <version>0.1.0</version>
        </Prem_Spectra>
    </modules>

    <global>
        <models>
            <spectra>
                 <class>Prem_Spectra_Model</class>
            </spectra>
        </models>

        <helpers>
            <prem_spectra>
                <class>Prem_Spectra_Helper</class>
            </prem_spectra>
        </helpers>

    </global>
</config>
4

3 に答える 3

10

これは、レイアウト xml とヘルパーの単純なメソッドを使用して非常に簡単に実現できます。ここでのオブザーバーの要件や、過度に手の込んだものは見当たりません。

そのため、独自のモジュール ストア構成値からすべてのカテゴリ ページ レイアウトを変更するという要件に基づいて、レイアウト xml に次のものが必要になります。

<catalog_category_view>
    <reference name="root">
        <action method="setTemplate">
            <template helper="yourmodule/switchTemplate" />                  
        </action>
    </reference>
</catalog_category_view>

そして、あなたのモジュールのデフォルトのヘルパーに以下を追加してください:

public function switchTemplate()
{
    $template = Mage::getStoreConfig('path_to/yourmodule/config');
    return $template;
}
于 2012-07-21T17:25:14.140 に答える
-1

ルート要素のテンプレートについて話しているので、3columns、2columns などですか? 正しい?

オブザーバーを実装し、イベントをリッスンしてから、controller_action_layout_generate_blocks_beforeオブザーバーでブロックを取得し、テンプレートを設定します

Mage::app()->getLayout()->getBlock('root')->setTemplate($myFancyTemplatePath);

これでうまくいくはずです。

別のアイデアとして、イベントを試してみてくださいcontroller_action_layout_load_before。しかし、これは時期尚早だと思います。

于 2012-07-21T16:26:32.210 に答える
-2

ファビアンの答えに加えて:

おそらく、カテゴリ「表示モード」の機能を拡張できます。イベントを使用してcontroller_action_layout_load_before、カテゴリの表示モードを取得し、その XML 更新ハンドルを作成します。

    $category = Mage::registry('current_category');
    $handle = 'category_displaymode_' . strtolower($category->getDisplayMode());

    $layout = $observer->getEvent()->getLayout();
    $layout->getUpdate()->addHandle($handle);

このようにして、local.xml ですべての種類のレイアウトを事前に定義し、管理者のカテゴリ編集ページの「表示モード」ドロップダウンを調整することで、レイアウトを簡単に切り替えることができます。

管理者を微調整することで、追加の表示モードをドロップダウンに追加して、より多くの種類のカスタム表示モード xml 更新ハンドルを使用できるようにすることができます。

于 2012-07-21T17:24:44.670 に答える