Magento:Adminhtml控制器在前端


Magento: Adminhtml controllers in frontend?

我正在尝试编写一个模块,允许用户在我们的系统中创建自己的商店(多商店功能)。

我想知道,有可能在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'