Magento:在管理区域为客户和商店创建新订单的URL是什么?

时间:2012-01-23 18:07:26

标签: magento

我在Admin主题中创建了一个按钮,名为“为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 个答案:

答案 0 :(得分:2)

您无需指定密钥,getUrl会在管理环境中为您执行此操作。

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

当像这样使用start时,它会擦除​​除customer_id之外的所有参数,因此无法指定商店。如果您将网址更改为store_id但未启动新订单,则会尊重*/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 :(得分:1)

如果您想创建新客户而不是在创建新订单时选择一个客户,则必须以这种方式将customer_id设置为false:

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

为什么呢?因为使用

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

因销售/订单/创建控制器

中的实施原因而获得帮助
if ($customerId = $this->getRequest()->getParam('customer_id')) {
        $this->_getSession()->setCustomerId((int) $customerId);
    }

正如你所看到的那样" int"那里会转换您发送的任何内容,我们需要将false设置为customer_id,否则Magento将首先创建网格。