バックエンドのMagentoタブ(varienTabs
)のクリックをリッスンするには、既存のオブザーバーにカスタムオブザーバーを追加するだけです。あなたの例(バックエンドの「顧客ページの編集」)を使用すると、これは次のようになります。
var myTabs = $$("#customer_info_tabs li a.tab-item-link");
for (var i = 0; i < myTabs.length; i++) {
Event.observe(myTabs[i], "click", function (event) {
var tab = Event.findElement(event, "a");
// insert your custom code here
alert(tab.id);
Event.stop(event);
});
}
コアファイルを変更せずに(アップグレード可能性を壊して)カスタムオブザーバーを実装するには、適切な管理コントローラーアクションをオーバーライドできます。
たとえば、オーバーライドMage_Adminhtml_CustomerController::editAction()
:
<!-- app/code/local/My/Adminhtml/etc/config.xml -->
<config>
<modules>
<My_Adminhtml>
<version>0.1.0</version>
</My_Adminhtml>
</modules>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<My_Adminhtml before="Mage_Adminhtml">My_Adminhtml</My_Adminhtml>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
次に、カスタム管理コントローラーを定義します。
// app/code/local/My/Adminhtml/controllers/CustomerController.php
require 'Mage/Adminhtml/controllers/CustomerController.php';
class My_Adminhtml_CustomerController extends Mage_Adminhtml_CustomerController
{
public editAction()
{
// copy of Mage_Adminhtml_CustomerController::editAction() code here
}
}
最後に、オーバーライドされたアクションで、カスタムオブザーバースクリプトを含む追加のテキストブロックを作成し、そのブロックをレイアウトに追加します。たとえば、最後に次のeditAction
ようなものを挿入します。
:
$this->loadLayout();
$oBlock = $this->getLayout()->createBlock('core/text')->setText('
<script type="text/javascript">
var myTabs = $$("#customer_info_tabs li a.tab-item-link");
for (var i = 0; i < myTabs.length; i++) {
Event.observe(myTabs[i], "click", function (event) {
var tab = Event.findElement(event, "a");
alert(tab.id);
Event.stop(event);
});
}
</script>
');
$this->getLayout()->getBlock('left')->append($oBlock);
$this->renderLayout();
: