我在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));
请有人帮帮我吗?
答案 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将首先创建网格。