Я работаю над проектом "для удовольствия", который я надеюсь выпустить как проект "для удовольствия" с открытым исходным кодом.Я создал Arduino, уведомляющий о заказе, подключенный к сети, и создаю его интерфейс Magento adminhtml.Это может показаться слишком сложным для того, что я делаю, но у меня есть другие приложения, которые мне полезны, и я пытаюсь узнать что-то новое.
С учетом сказанного я создал новое "Arduino" adminhtmlпункт меню рядом с «Отчеты» в бэкэнде Magento.Есть определенные моменты, когда определенные отзывы от Arduino могут автоматически отключить модуль, и в этом случае моя цель состоит в том, чтобы удалить пункт меню со страницы, ЕСЛИ БЫЛИ другие элементы подменю, в этом случае я удаляю только те пункты меню, которые специфичны для моего модуля,Опять же, это может показаться не очень реалистичным для этого проекта, но в попытке сделать это как можно более «правильным», что является моей целью, оставить открытой возможность, что кто-то другой потенциально может добавить пункт меню «Arduino».
Теперь у меня есть этот работающий БОЛЬШОЙ, без проблем, ЕСЛИ кеширование отключено.Это еще один способ сказать: «это не работает, потому что, очевидно, у всех будет включен кеш».Тем не менее, вот код, с которого я начал:
/**
* Used to disable the Arduino menu option dynamically.
*
* @param Varient_Event_Observer $observer
*/
public function controllerActionLayoutGenerateBlocksBefore(Varien_Event_Observer $observer)
{
//We only want to disable the arduino menu if our module was specifically disabled in backend
if(Mage::helper('mynamespace_myarduinomodule')->isDisabled())
{
/* @var $arduinoItems Varien_Simplexml_Element */
/* @var $parent Varien_Simplexml_Element */
$arduinoItems = Mage::getSingleton('admin/config')->getAdminhtmlConfig()->getNode('menu/arduinomenu/children');
$parent = Mage::getSingleton('admin/config')->getAdminhtmlConfig()->getNode('menu');
//If there are other menu options in the arduino menu option we only want to hide
//the menu items related to our specific module, leaving the top level menu item alone
if($arduinoItems->children()->count() > 1)
{
$parent->setNode("arduino/children/myarduinomodule", "", true);
}
//But, if not, then we want to hide the entire arduino tab
else
{
$parent->setNode("arduino", "", true);
}
}
return $this;
}
Это явно добавляет некоторые накладные расходы, но это только в разделе adminhtml.Теперь моя цель - найти «хорошее» решение, но я не уверен, что оно есть.Я прочитал это очень хорошее сообщение в блоге , и хотя я думаю, что что-то подобное может работать для моих целей (в обратном порядке), я бы предпочел создать модуль, который не использует переписывание классов, так что я не будуНе нужно беспокоиться о других модулях, переписывающих тот же класс.
У кого-нибудь есть какие-либо советы о том, как я могу подойти к этой проблеме?Является ли то же кеширование проблемой, если я должен был добавить свои пользовательские пункты меню в существующий «родительский» пункт меню (например, если бы я добавил свои параметры Arduino ниже «Система»)?
Спасибо за вашевремя и этот замечательный ресурс!
РЕДАКТИРОВАТЬ:
- вход / выход из системы, похоже, "исправляет" мою существующую проблему и корректно обновляет меню.Конечно, я не хочу заставлять пользователя выходить из системы, но, может быть, где-то есть решение?