我正在尝试组合一个可以执行一些自定义排序任务的管理模块,但我遇到了一个我似乎无法找到答案的问题。基本上,我在管理配置中添加了一个部分,其中有几个按钮可以扫描最近的订单,并为我以后可以使用的订单项目设置一些自定义值。为此,我在system.xml中添加了一个按钮重定向到控制器。控制器执行必要的任务(或实例化一个模型来执行此操作),然后需要重定向回它来自的管理页面。这是让我感到困惑的部分。我似乎无法找出将当前 URL 从管理部分传递到控制器的最佳方法,以便控制器知道重定向回的位置。当然,我可以对其进行硬编码,但我真的不想这样做。此外,这甚至是正确的方法吗?如果控制器没有布局并且它的唯一目的是在按钮单击时做一些事情,有没有更好的方法来解决它?
假设这是解决此问题的正确方法,以下是我的文件中的一些块供参考。
系统.xml
这是声明按钮的system.xml部分。请注意,我使用的是自定义 frontend_model 类,因为这是我可以让它工作的唯一方法(有更好的方法吗?)
<fields>
<calcmargin translate="label">
<label>Calculate Margins</label>
<comment>
<![CDATA[Calculates the order margins]]>
</comment>
<frontend_type>button</frontend_type>
<frontend_model>sorting/source_buttons_calcmargin</frontend_model>
<sort_order>10</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</calcmargin>
</fields>
配置文件
在 config.xml 中,我声明了我的管理路由器(除其他外)
<admin>
<routers>
<sorting>
<use>admin</use>
<args>
<module>VPS_Sorting</module>
<frontName>sorting</frontName>
</args>
</sorting>
</routers>
</admin>
按钮源
这是我的源按钮类中的_getElementHtml函数
public function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
{
//save the current URL in the sorting/data singleton for future use
Mage::getSingleton('sorting/data')->setSortingReturnUrl(Mage::helper('core/url')->getCurrentUrl());
$this->setElement($element);
$html = $this->getLayout()->createBlock('adminhtml/widget_button')
->setType('button')
->setClass('scalable')
->setLabel($this->buttonLabel)
->setOnClick("setLocation('$this->buttonUrl')")
->toHtml();
return $html;
}
注意: $this->buttonUrl之前使用$this->getUrl('sorting/index/calcmargin')
在本例中,我有一个名为Data.php的模型,我使用getSingleton对其进行实例化并设置返回 URL。
索引控制器
public function calcmarginAction()
{
$orderCollection = Mage::getModel('sales/order')->getCollection();
foreach($orderCollection as $order)
{
//Do Stuff
//...
}
echo "DONE...now return to " . Mage::getSingleton('sorting/data')->getSortingReturnUrl();
//outputs: 'DONE...now return to '...so clearly the value wasn't saved
}
不幸的是,当它到达控制器时,该值不再存在。所以我想我真的不明白单身人士是如何工作的,他们会坚持多久......
我还尝试将值保存在核心/会话单例中,但这也不起作用。
所以,如果你还在我身边,你有什么想法吗?
谢谢!