Сохранить имя администратора на order_status Изменение с помощью наблюдателя
-
16-10-2019 - |
Вопрос
Я пытаюсь выяснить, какое событие следует наблюдать, чтобы сохранить имя зарегистрированного администратора, которое меняет состояние заказа, что делает его видимым в комментариях заказа.
Я попробовал sales_order_save_before и sales_order_save_after, но это не будет именем администратора в истории комментариев.
Кто -нибудь может мне помочь?
Вот мой код модуля на основе наблюдателя:
config.xml
<controller_action_predispatch_adminhtml_sales_order_save_before>
<observers>
<module_ordercomment>
<class>Thaneuk_OrderComment_Model_Observer</class>
<method>controllerActionPredispatchAdminhtmlSalesOrderSaveBefore</method>
</module_ordercomment>
</observers>
</controller_action_predispatch_adminhtml_sales_order_save_before>
</events>
И stemver.php
<?php
class Company_OrderComment_Model_Observer {
function controllerActionPredispatchAdminhtmlSalesOrderSaveBefore($observer)
{
$post = Mage::app()->getRequest()->getPost('comment');
if ($post && isset($post['comment'])) {
$post['comment'] .= $this->_getAppend();
Mage::app()->getRequest()->setPost('comment', $post);
}
}
protected function _getAppend()
{
$user = Mage::getSingleton('admin/session');
$username = $user->getUser()->getUsername();
return " : " . $username;
}
}
Головы вверх будут оценены!
Решение 3
Я действительно сделал это пару лет назад:
config.xml
<?xml version="1.0"?>
<config>
<modules>
<Company_OrderComment>
<version>0.0.1</version>
</Company_OrderComment>
</modules>
<adminhtml>
<events>
<controller_action_predispatch_adminhtml_sales_order_addComment>
<observers>
<Company_OrderComment>
<class>Company_OrderComment_Model_Observer</class>
<method>controllerActionPredispatchAdminhtmlSalesOrderAddComment</method>
</Company_OrderComment>
</observers>
</controller_action_predispatch_adminhtml_sales_order_addComment>
<controller_action_predispatch_adminhtml_sales_order_create_addComment>
<observers>
<Company_OrderComment>
<class>Company_OrderComment_Model_Observer</class>
<method>controllerActionPredispatchAdminhtmlSalesOrderCreateAddComment</method>
</Company_OrderComment>
</observers>
</controller_action_predispatch_adminhtml_sales_order_create_addComment>
<controller_action_predispatch_adminhtml_sales_order_creditmemo_save>
<observers>
<Company_OrderComment>
<class>Tamedo_OrderComment_Model_Observer</class>
<method>controllerActionPredispatchAdminhtmlSalesOrderCreditmemoSave</method>
</Company_OrderComment>
</observers>
</controller_action_predispatch_adminhtml_sales_order_creditmemo_save>
<controller_action_predispatch_adminhtml_sales_order_creditmemo_addComment>
<observers>
<Company_OrderComment>
<class>Tamedo_OrderComment_Model_Observer</class>
<method>controllerActionPredispatchAdminhtmlSalesOrderCreditmemoAddComment</method>
</Company_OrderComment>
</observers>
</controller_action_predispatch_adminhtml_sales_order_creditmemo_addComment>
<controller_action_predispatch_adminhtml_sales_order_creditmemo_addComment>
<observers>
<Company_OrderComment>
<class>Company_OrderComment_Model_Observer</class>
<method>controllerActionPredispatchAdminhtmlProductReturnEdit</method>
</Company_OrderComment>
</observers>
</controller_action_predispatch_adminhtml_sales_order_creditmemo_addComment>
</events>
</adminhtml>
</config>`
Наблюдатель.php
<?php
class Company_OrderComment_Model_Observer {
function controllerActionPredispatchAdminhtmlSalesOrderAddComment($observer)
{
$history = Mage::app()->getRequest()->getPost('history');
if ($history && isset($history['comment'])) {
$history['comment'] .= $this->_getAppend();
Mage::app()->getRequest()->setPost('history', $history);
}
}
function controllerActionPredispatchAdminhtmlSalesOrderCreateAddComment($observer)
{
$history = Mage::app()->getRequest()->getPost('history');
if ($history && isset($history['comment'])) {
$history['comment'] .= $this->_getAppend();
Mage::app()->getRequest()->setPost('history', $history);
}
}
function controllerActionPredispatchAdminhtmlSalesOrderCreditmemoSave($observer)
{
$post = Mage::app()->getRequest()->getPost('creditmemo');
if ($post && isset($post['comment_text'])) {
$post['comment_text'] .= $this->_getAppend();
Mage::app()->getRequest()->setPost('creditmemo', $post);
}
}
function controllerActionPredispatchAdminhtmlSalesOrderCreditmemoAddComment($observer)
{
$post = Mage::app()->getRequest()->getPost('comment');
if ($post && isset($post['comment'])) {
$post['comment'] .= $this->_getAppend();
Mage::app()->getRequest()->setPost('comment', $post);
}
}
protected function _getAppend()
{
$user = Mage::getSingleton('admin/session');
$username = $user->getUser()->getUsername();
return "<br/><br/> From: " . $username;
}
}
Вы можете получить полный модуль здесь Администратор комментарий
Другие советы
РЕДАКТИРОВАТЬ:
Вы также можете сделать следующее, которое я бы порекомендовал в предыдущем решении, которое я опубликовал. Главным образом потому, что он не использует SetPost, что я бы считал страшным.
config.xml:
<adminhtml>
<events>
<sales_order_status_history_save_before>
<observers>
<module_status_history_save_before>
<class>module/observer</class>
<method>commentSaveBefore</method>
</module_status_history_save_before>
</observers>
</sales_order_status_history_save_before>
</events>
</adminhtml>
Xersver.php:
public function commentSaveBefore($obs) {
$event = $obs->getEvent();
$status = $event->getDataObject();
$status->setComment($status->getComment().$this->_getAppend());
}
protected function _getAppend()
{
$admin = Mage::getSingleton('admin/session')->getUser();
$username = $admin->getUsername();
return " : " . $username;
}
Это сделало бы то же самое, за исключением того, что вы перехватываете модель, прежде чем она будет сохранена, что позволит вам изменить комментарий без необходимости использовать SetPost ().
Оригинальный пост: Вы можете сделать следующее:
config.xml:
<adminhtml>
<events>
<controller_action_predispatch_adminhtml_sales_order_addComment>
<observers>
<module_order_save_comment>
<class>module/observer</class>
<method>adminhtmlSavingOrderComment</method>
</module_order_save_comment>
</observers>
</controller_action_predispatch_adminhtml_sales_order_addComment>
</events>
</adminhtml>
Xersver.php:
public function adminhtmlSavingOrderComment($obs) {
$event = $obs->getEvent();
$order = $event->getOrder();
$data = Mage::app()->getRequest()->getPost('history');
if ($data && isset($data['comment'])) {
$data['comment'] .= $this->_getAppend();
Mage::app()->getRequest()->setPost('history', $data);
}
}
protected function _getAppend()
{
$admin = Mage::getSingleton('admin/session')->getUser();
$username = $admin->getUsername();
return " : " . $username;
}
Это должно работать для вас.
Я думаю, что событие, которое вы наблюдаете, не существует.
Попробуйте это вместо этого controller_action_predispatch_adminhtml_sales_order_addcomment
.
Комментарий отправлен на этот URL:MAGENTO_ROOT/index.php/admin/sales_order/addComment/order_id/ORDER_ID_HERE/