システム構成の下でカスタムモジュールのファイルを追加する方法は? [複製
質問
この質問にはすでに答えがあります:
システム - >構成に独自のモジュールがあり、JSファイルとCSSファイルを追加したいと考えています。今はそうです:
<layout version="0.1.0">
<default>
<reference name="head">
<action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
<action method="addCss"><name>mymodule.css</name></action>
</reference>
</default>
</layout>
この方法で、すべての管理ページにファイルが追加されました。このファイルを1つのページに追加するにはどうすればよいなので、デフォルトではなく、mymodule_adminまたはそのようなSMTHを書き込みますか?
解決
レイアウトハンドルを使用できます adminhtml_system_config_edit
それ以外の default
, 、およびシステム> [構成]の下でのみファイル。 XMLは次のようになります:
<layout version="0.1.0">
<adminhtml_system_config_edit>
<reference name="head">
<action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
<action method="addCss"><name>mymodule.css</name></action>
</reference>
</adminhtml_system_config_edit>
</layout>
Magentoがこれを箱から出していないため、これらの新しいファイルのみがCertailセクションの下でのみ必要な場合は、独自のレイアウトハンドルを追加する必要があります。正直に言うと、これは本当に努力する価値はないと思いますが、あなたの質問に答えるために:
イベントオブザーバーを追加します
これを達成するには、イベントを聞いてください controller_action_layout_load_before
. 。あなたの中で config.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<!-- ... -->
<adminhtml>
<events>
<controller_action_layout_load_before>
<observers>
<my_module_observer>
<class>my_module/observer</class>
<method>addCustomLayoutHandle</method>
</my_module_observer>
</observers>
</controller_action_layout_load_before>
</events>
</adminhtml>
<!-- ... -->
</config>
イベントが投げ込まれます Mage_Core_Controller_Varien_Action
メソッドで loadLayoutUpdates()
.
カスタムレイアウトハンドルを追加します
イベントオブザーバーを定義したので、現在オンになっているページがモジュールのシステム構成に対応するかどうかを確認できます。あなたのイベントでオブザーバー:
public function addCustomLayoutHandle(Varien_Event_Observer $observer)
{
$controllerAction = $observer->getEvent()->getAction();
$layout = $observer->getEvent()->getLayout();
if ($controllerAction && $layout && $controllerAction instanceof Mage_Adminhtml_System_ConfigController) { // Can be checked in other ways of course
if ($controllerAction->getRequest()->getParam('section') == 'my_module_section') {
$layout->getUpdate()->addHandle('my_custom_handle');
}
}
return $this;
}
カスタムレイアウトハンドルは今すぐロードする必要があります。この新しいハンドルをレイアウト定義に使用できます。これをテストする時間がなかったわけではありません。うまく機能していることを願っています。あなたの問題に対する可能な解決策をあなたに向けたかっただけです。
他のヒント
レイアウトハンドル名を変更します。それ以外の default
ページにデフォルトのハンドラーを使用します。たとえば、あなたのページURLがこの「モジュール/adminhtml_entity/index」のように見える場合(または module/adminhtml_entity/
あなたのレイアウトは次のようになります:
<layout>
<module_adminhtml_entity_index>
<reference name="head">
<action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
<action method="addCss"><name>mymodule.css</name></action>
</reference>
</module_adminhtml_entity_index>
</layout>
あなたのURLがどのように見えるか admin/module_entity/index
あなたのレイアウトは次のようになります:(管理者をadminhtmlに置き換えます)
<layout>
<adminhtml_module_entity_index>
<reference name="head">
<action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
<action method="addCss"><name>mymodule.css</name></action>
</reference>
</adminhtml_module_entity_index>
</layout>