我正在尝试编写一个模块,允许用户在我们的系统中创建自己的商店(多商店功能)。
我想知道,有可能在Magento前端执行adminhtml控制器的功能吗?
此时此刻,我刚刚创建了文件夹,并在Magento后端点击保存网站时编辑了index.php, .htaccess
。我需要更多,请帮忙。
任何帮助都将不胜感激。谢谢
我认为这不是一个好主意-允许创建自己商店的人应该获得一个管理员帐户(你知道你可以定义权限受限的角色吗?)
但要回答这个问题:这是可能的。您必须创建一个自己的前端控制器,模拟登录的管理员用户,然后转发到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
是要在其下执行操作的后端用户的id。这不应该是你自己的具有完全权限的管理员帐户,而是一个只有必要权限的虚拟帐户,或者一个真正的帐户,对每个用户来说都是不同的。
关于(_forward):
该方法在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'
。