Как добавить пользовательскую кнопку для заказа страницы просмотра рядом с "Назад" и "Изменить"?
Как добавить новую кнопку для просмотра в панели администратора Magento?
Ответ 1
config.xml:
<global>
<blocks>
<adminhtml>
<rewrite>
<sales_order_view>Namespace_Module_Block_Adminhtml_Sales_Order_View</sales_order_view>
</rewrite>
</adminhtml>
</blocks>
</global>
Пространство имен/модуль/блок/Adminhtml/Продажа/Заказ/view.php:
class Namespace_Module_Block_Adminhtml_Sales_Order_View extends Mage_Adminhtml_Block_Sales_Order_View {
public function __construct() {
parent::__construct();
$this->_addButton('button_id', array(
'label' => Mage::helper('xxx')->__('Some action'),
'onclick' => 'jsfunction(this.id)',
'class' => 'go'
), 0, 100, 'header', 'header');
}
}
Ответ 2
Вместо основных хаков или перезаписи просто используйте наблюдателя, чтобы добавить кнопку в порядок:
<adminhtml>
<events>
<adminhtml_widget_container_html_before>
<observers>
<your_module>
<class>your_module/observer</class>
<type>singleton</type>
<method>adminhtmlWidgetContainerHtmlBefore</method>
</your_module>
</observers>
</adminhtml_widget_container_html_before>
</events>
</adminhtml>
Затем просто проверьте наблюдателя, если тип блока соответствует представлению заказа:
public function adminhtmlWidgetContainerHtmlBefore($event)
{
$block = $event->getBlock();
if ($block instanceof Mage_Adminhtml_Block_Sales_Order_View) {
$message = Mage::helper('your_module')->__('Are you sure you want to do this?');
$block->addButton('do_something_crazy', array(
'label' => Mage::helper('your_module')->__('Export Order'),
'onclick' => "confirmSetLocation('{$message}', '{$block->getUrl('*/yourmodule/crazy')}')",
'class' => 'go'
));
}
}
Функция "getUrl" блока автоматически добавит текущий идентификатор заказа к вызову контроллера.
Ответ 3
В отношении комментариев выше о родительском:: __ конструкторе, вот что сработало для меня:
class Name_Module_Block_Adminhtml_Sales_Order_View extends Mage_Adminhtml_Block_Sales_Order_View {
public function __construct() {
$this->_addButton('testbutton', array(
'label' => Mage::helper('Sales')->__('Toms Button'),
'onclick' => 'jsfunction(this.id)',
'class' => 'go'
), 0, 100, 'header', 'header');
parent::__construct();
}
}
Ответ 4
Если вы хотите сделать это быстро и грязно (т.е. отредактируйте файлы ядра), откройте app/code/core/Mage/Adminhtml/Block/Sales/Order/View.php
и добавьте что-то вроде:
$this->_addButton('order_reorder', array(
'label' => Mage::helper('sales')->__('Print Labels'),
'onclick' => 'window.open(\'/printouts/' . $this->getOrder()->getRealOrderId() . '.pdf\')',
));
Вы можете разместить это до этого блока:
if ($this->_isAllowedAction('emails') && !$order->isCanceled()) {
$message = Mage::helper('sales')->__('Are you sure you want to send order email to customer?');
$this->addButton('send_notification', array(
'label' => Mage::helper('sales')->__('Send Email'),
'onclick' => "confirmSetLocation('{$message}', '{$this->getEmailUrl()}')",
));
}
Ваша задача, если вы решите принять это, - создать файл на локальном компьютере, который является чрезмерным движением основного файла, и опубликовать его здесь!