Magento: Каков URL для создания нового заказа для покупателя и магазина в админке? - PullRequest
0 голосов
/ 23 января 2012

Я создал кнопку в теме администратора, которая называется «Создать заказ для Johnsons»

В основном с помощью этой кнопки я хочу указать ей новый экран создания заказа для customerid 3 и store 2. Примерно так:

$key=Mage::getSingleton('adminhtml/url')->getSecretKey("sales_order_create","index"); 
echo $COUrl=Mage::helper("adminhtml")->getUrl("adminhtml/sales_order/new/",array("customer_id"=>"3","key"=>$key));

Пожалуйста, кто-нибудь может мне помочь?

Ответы [ 2 ]

2 голосов
/ 23 января 2012

Вам не нужно указывать ключ, getUrl делает это для вас в контексте администратора.

echo $this->getUrl('*/sales_order_create/start', array('customer_id' => 3));

При использовании start, как это, он стирает все параметры, кроме customer_idпоэтому магазин не может быть указан.Он будет учитывать параметр store_id, если вы измените URL на */sales_order_create/index, но это не запустит новый заказ, поэтому это будет проблематично.Чтобы заставить это работать, вам нужно будет создать новый контроллер и действие для вашего собственного использования и сделать его почти таким же, как Mage_Adminhtml_Sales_Order_CreateController::startAction():

/**
 * Start order create action
 */
public function startAction()
{
    Mage::getSingleton('adminhtml/session_quote')->clear();
    $this->_redirect('*/sales_order_create', array(
        'customer_id' => $this->getRequest()->getParam('customer_id'),
        'store_id'    => $this->getRequest()->getParam('store_id')
    ));
}
1 голос
/ 10 мая 2018

Если вы хотите создать нового клиента вместо того, чтобы выбирать его при создании нового заказа, вы должны установить customer_id как false таким образом:

Mage::getModel('adminhtml/session_quote')->setData('customer_id',false);

Почему?Потому что использование

$this->getUrl('*/sales_order_create/any_action_controller', array(
        'customer_id' => false
    ));

не поможет по причине реализации в Sales / Order / CreateController

if ($customerId = $this->getRequest()->getParam('customer_id')) {
        $this->_getSession()->setCustomerId((int) $customerId);
    }

Как вы можете видеть, там есть "int", которая преобразует все, что вы отправляетеи нам нужно установить false в качестве customer_id, так как в противном случае Magento сначала создаст сетки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...