Я пытаюсь написать модуль, который позволяет пользователям создавать свои собственные магазины в нашей системе (функция multi-store).
Мне интересно, возможно ли выполнять функции контроллера adminhtml в интерфейсе Magento?
В данный момент я просто создаю папку и редактирую index.php, .htaccess
при нажатии сохранить сайт в бэкенде Magento. Мне нужно больше, пожалуйста, помогите.
Любая помощь будет оценена. Спасибо!
Я не думаю, что это хорошая идея — люди, которым разрешено создавать свой собственный магазин, должны получить учетную запись администратора (вы знаете, что вы можете определять роли с ограниченными разрешениями?)
Но ответить на вопрос: это возможно. Вам нужно будет создать собственный контроллер внешнего интерфейса, который имитирует вошедшего в систему пользователя-администратора, а затем переходит к действию контроллера adminhtml.
public function saveStoreAction()
{
$adminUser = Mage::getModel('admin/user')->load(ADMIN_USER_ID);
$adminSession = Mage::getSingleton('admin/session');
$adminSession->setUser($adminUser);
$adminSession->setIsFirstPageAfterLogin(false);
$this->_forward('save', 'store', 'adminhtml');
}
ADMIN_USER_ID
будучи идентификатором внутреннего пользователя, под которым вы хотите выполнить действие. Это должна быть не ваша собственная учетная запись администратора с полными привилегиями, а фиктивная учетная запись, имеющая только необходимые разрешения, или реальная учетная запись, индивидуальная для каждого пользователя.
Метод определен в Mage_Core_Controller_Varien_Action
и задокументировано так:
/**
* Throw control to different action (control and module if was specified).
*
* @param string $action
* @param string|null $controller
* @param string|null $module
* @param array|null $params
*/
Он манипулирует текущим объектом запроса и устанавливает его как «не отправленный», чтобы фронт-контроллер снова попытался найти подходящий контроллер действия для его отправки, на этот раз в соответствии с новыми параметрами.
На самом деле в моей первой версии была ошибка, _forward не использует такой маршрут, как 'adminhtml/store/save'
в качестве параметра, но отдельные части в обратном порядке, 'save', 'store', 'adminhtml'
,
Других решений пока нет …