レイアウトアップデートXMLファイルを動的に追加します
-
16-10-2019 - |
質問
私が取り組んでいる拡張機能では、このセクションがモジュールにあります config.xml
-
<config>
<frontend>
<layout>
<updates>
<packagename_modulename module="packagename_modulename">
<file>packagename_modulename</file>
</packagename_modulename>
</updates>
</layout>
</frontend>
</config>
これは予想通りに正しく機能しますが、今ではそのレイアウトアップデートACCをアクティブにしたい別の状況があります。いくつかの条件に。同じ最終結果を達成したいのですが、PHPコードから動的に達成します。コントローラーまたはオブザーバーのいずれかからグローバル構成にそのノードを動的に挿入する方法はありますか?
ところで、私がそれに追加したいいくつかの構成もいくつかあります。 Magentoブロックとモデルのいくつかのクラスを書き換えるために使用されます。しかし、グローバルな構成にプログラマで挿入する方法を理解できれば、同じようにその構成も追加できると思います。
編集
明確にするために、この構成が存在するかのように、拡張機能を正確に機能させたい config.xml
ファイルですが、ではなくPHPコードから追加したい config.xml
.
ブロックとモデルを書き直すために、私は似ています -
<config>
<global>
<blocks>
<payment>
<rewrite>
<form_cc>PackageName_ModuleName_Block_Form_Cc</form_cc>
</rewrite>
</payment>
</blocks>
</global>
</config>
アップデート
それで、ファビアンの提案を使用して、私はさらに進歩しました。 config.xmlから何も削除しませんでした、私は使用しました Mage::app()->getConfig()->setNode('path_to_config', '')
オブザーバーの内部 controller_action_layout_load_before
&構成を正しく設定しています。これにより、モジュールの構成から行ったすべてのモデルとブロックの書き換えを取り消すことができました。次にルーターから、モジュールによって追加されたコントローラーの書き換えを元に戻すことができました。
ここには問題が1つしか残っていません。ロードされたらレイアウトファイルがキャッシュされています。上記のソリューションは、レイアウトキャッシュがMagentoの管理者から無効になっている限り機能します。では、「特定の拡張機能をキャッシュしない」方法はありますか?これは特定のユースケースのみであるため、コアファイルを編集して実行できても問題ありません
解決 3
私が最終的に使用したソリューションは、モジュールに持っていたすべてのモデルとブロックの書き換えを取り消すことです config.xml
の中に controller_action_layout_load_before
オブザーバーとその後、Magento Adminに行き、 Block HTML
& Layout
キャッシュ。
他のヒント
レイアウトファイルを追加するには:
Mage::app()->getLayout()->loadFile($file);
ハンドルを追加するには:
Mage::app()->getLayout()->getUpdate()->addHandle('your_handle_name');
構成内の設定を変更するには:
Mage::getConfig()->setNode(
'global/helpers/core/encryption_model',
'Ikonoshirt_Pbkdf2_Model_Stub_EE'
);
ロジックはレイアウトXMLを介して達成できますが、2つの明確なオプションがあります。レスポンシブデザインを実装する(ニーズに基づいて機能しない場合があります)、または独自のテーマ設定で別のサブドメインを使用します。現在使用している条件付きアプローチでは、多くのキャッシュキーに状態を追加する必要があり、以前と同じボートにいます。