Где генерируется идентификатор заказа?
-
16-10-2019 - |
Вопрос
Я переопределяю функцию SaveRoderAction в OnePageController.php (/App/Code/Core/Mage/Checkout/Controllers) с моим пользовательским кодом.
Я успешно реализовал логику для этого. Я считаю, что на данный момент в начале функции, поскольку заказ не был выполнен, нет идентификатора заказа. Вместо этого у меня есть доступ к «идентификатору цитаты».
Что мне нужно сделать сейчас, так это выяснить, где генерируется идентификатор заказа для заказа. Мой первый вопрос: какой файл/функция лучше всего переопределить, когда создается идентификатор заказа?
Мой второй вопрос: есть ли способ связать идентификатор цитаты с идентификатором заказа, который генерируется?
По сути, моя цель состоит в том, чтобы получить идентификатор заказа в настоящее время заказанные элементы, чтобы я мог сделать дальнейшую пользовательскую обработку.
Мой код наблюдателя проходит через этот путь:/local/james/reweCeckout
config.xml -/loc
Veamver.php -/local/james/effeCheckout/model
Содержание config.xml:
<?xml version="1.0"?>
<config>
<modules>
<James_Aftercheckout>
<version>0.1.0</version>
</James_Aftercheckout>
</modules>
<global>
<events>
<sales_model_service_quote_submit_before>
<observers>
<james_aftercheckout_observer>
<type>singleton</type>
<class>James_Aftercheckout_Model_Observer</class>
<method>test</method>
</james_aftercheckout_observer>
</observers>
</sales_model_service_quote_submit_before>
</events>
</global>
Код для xersver.php:
class James_Aftercheckout_Model_Observer
{
public function test($observer)
{
$quote = $observer->getEvent()->getQuote();
$incrementId = $quote->getReservedOrderId();
$to = "myemail@gmail.com";
$subject = "Test mail";
$message = "Hello! This is a simple email message! .".$incrementId;
$from = "randomemail@example.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
}
}
Решение
Идентификатор приращения заказа создается при подаче заказа, в этом методе Mage_Sales_Model_Service_Quote::submitOrder()
. Анкет Линия, ответственная за создание $quote->reserveOrderId();
.
Если вы хотите получить доступ к нему, вы можете зацепить событие sales_model_service_quote_submit_before
.
Вы сможете получить идентификатор приращения в своем наблюдателе, как это:
public function doSomething($observer){//observer for the event
$quote = $observer->getEvent()->getQuote();
$incrementId = $quote->getReservedOrderId();
//do stuff
}