Orderverを使用してAdmin Nameを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>
およびObserver.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>`
Observer.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>
Observer.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>
Observer.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/