如何在Magento的“客户信息”选项卡中添加按钮?

时间:2014-11-03 23:20:23

标签: magento events magento-1.8 observers adminhtml

我正在尝试在Customers->Account Information标签中添加一个按钮。我希望按钮在单击时执行操作。我想在自定义模块中执行此操作。我不太喜欢重写核心文件或任何类的想法。根据我用google搜索,人们说你可以使用Observer来做到这一点,例如here,如果这是真的那么我想这样做。

我知道如何制作一个基本模块,我需要帮助的是如何在不重写文件/类的情况下将按钮放在特定的选项卡中?

2013年11月3日上午11点:

以下是屏幕截图here

我想在此标签上添加按钮。

更新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'
        ));
        }
    }
}

1 个答案:

答案 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();

这就是我弄清楚问题的原因。

非常有用。