Я пытаюсь собрать модуль администратора, который может выполнять некоторые пользовательские задачи сортировки, и я столкнулся с вопросом, на который, похоже, не могу найти ответ. По сути, я добавил в конфигурацию администратора раздел с несколькими кнопками, которые сканируют последние заказы и устанавливают некоторые пользовательские значения для элементов заказов, которые я могу использовать позже. Для этого я добавил в system.xml кнопку, которая перенаправляет на контроллер. Контроллер выполняет необходимую задачу (или создает модель для этого), а затем должен перенаправить обратно на страницу администратора, с которой он пришел. Это та часть, которая меня смутила. Кажется, я не могу найти лучший способ передать текущий URL из раздела администратора в контроллер, чтобы контроллер знал, куда перенаправить обратно. Конечно, я мог бы жестко закодировать это, но я бы действительно не хотел. Кроме того, это даже правильный способ сделать это? Если для контроллера нет макета, и его единственная цель - делать что-то по нажатию кнопки, есть ли лучший способ сделать это?
Предполагая, что это правильный путь, вот несколько фрагментов из моих файлов для справки.
System.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
В 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 возврата.
IndexController
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
}
К сожалению, когда он переходит к контроллеру, этого значения больше нет. Думаю, я не совсем понимаю, как работают синглтоны и как долго они держатся ...
Я также пытался сохранить значение в core / session singleton, но это тоже не сработало.
Итак, если вы все еще со мной, есть какие-нибудь мысли о том, что мне следует делать?
Спасибо!