我正在尝试在Customers->Account Information
标签中添加一个按钮。我希望按钮在单击时执行操作。我想在自定义模块中执行此操作。我不太喜欢重写核心文件或任何类的想法。根据我用google搜索,人们说你可以使用Observer
来做到这一点,例如here,如果这是真的那么我想这样做。
我知道如何制作一个基本模块,我需要帮助的是如何在不重写文件/类的情况下将按钮放在特定的选项卡中?
2013年11月3日上午11点:
以下是屏幕截图
我想在此标签上添加按钮。
更新2014年3月3日下午2:48
到目前为止,这是我的代码,也许我在某个地方犯了错误。
我的文件结构
-app
-local
-Rdtmodules
-ChangeGroupNotification
-etc
-config.xml
-Model
-Observer.php
-etc
-modules
-Rdtmodules_ChangeGroupNotification.xml
config.xml中
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Rdtmodules_ChangeGroupNotification>
<version>1.0.0</version>
</Rdtmodules_ChangeGroupNotification>
</modules>
<global>
<models>
<rdtmodules_changegroupnotification>
<class>Rdtmodules_ChangeGroupNotification_Model</class>
</rdtmodules_changegroupnotification>
</models>
<events>
<adminhtml_block_html_before>
<observers>
<rdtmodules_changegroupnotification>
<class>rdtmodules_changegroupnotification/observer</class>
<method>sendCustomerGroupChangeNotification</method>
<type>singleton</type>
</rdtmodules_changegroupnotification>
</observers>
</adminhtml_block_html_before>
</events>
</global>
</config>
Observer.php
<?php
class Rdtmodules_ChangeGroupNotification_Model_Observer {
public function sendCustomerGroupChangeNotification(Varien_Event_Observer $observer) {
$block = $observer->getEvent()->getData('block');
if($block->getId() == 'customer_edit' && $block->getRequest()->getControllerName() == 'customer_edit') {
$block->addButton('test_print', array(
'label' => 'Test',
'onclick' =>'setLocation(\'' . $block->getUrl('html/sales_order/print') . '\')',
'class' => 'go'
));
}
}
}
答案 0 :(得分:0)
所以我认为问题出在我的if语句中,因为其他一切都在运行。所以首先是我的观察者代码。
<强> Observer.php 强>
<?php
class Rdtmodules_GroupNotification_Model_Observer
{
public function sendNotification(Varien_Event_Observer $observer){
$block = $observer->getEvent()->getData('block');
if($block->getNameInLayout() == 'customer_edit' && $block->getRequest()->getControllerName() == 'customer') {
$block->addButton('test_print', array(
'label' => 'Test',
'onclick' =>'setLocation(\'' . $block->getUrl('html/sales_order/print') . '\')',
'class' => 'go'
));
}
}
}
$block->getId()
没有返回任何原因,因为它不起作用。控制器名称也不是customer_edit
它只是customer
o.o.
我怎么想出来的是我在布局中打印了控制器名称动作名称和块名称。
echo "Controller Name: " . $block->getRequest()->getControllerName();
echo "Action Name: " . $block->getRequest()->getActionName();
echo "Block Name: " . $block->getNameInLayout();
这就是我弄清楚问题的原因。
非常有用。