我们有几个magento网站,其中一些我们想打开网站限制,所以只有登录的客户才能查看。这似乎很有效,除了我们有自定义页面,我们希望用户无需登录即可访问。目前,如果我们打开访问限制,它会将登录页面和密码重置页面之外的所有页面重定向到登录页面。
有谁知道如何排除其他网页被重定向到登录页面?我认为这将是一个布局xml设置,但我似乎无法弄明白或在其上找到任何东西。
Magento Enterprise版本1.12.02
答案 0 :(得分:2)
从限制中排除页面的正确方法是将它们添加到Enterprise_WebsiteRestriction模块配置下的generic
页面列表中。
特别参见app/code/core/Enterprise/WebsiteRestriction/etx/config.xml
和config/frontend/enterprise/websiterestriction
部分。无论设置什么限制级别,始终都可以访问full_action_names/generic
下的页面。当限制模式设置为“登录和注册”时,full_action_names/register
中的人仍然可以访问 - 即,它们可用于新的注册。
这些部分下的值是完整的操作名称(即<module>_<controller>_<action>
),例如要为每个人启用联系表单,您需要将contacts_index_index
添加到generic
列表。
请注意,核心代码池中的编辑文件存在严重缺陷,因此要实现此目的,最好创建自己的模块并添加配置部分。
它应该看起来像这样(记得在app/etc/modules
中启用此模块):
<?xml version="1.0"?>
<config>
<modules>
<Emki_WebsiteUnrestrict>
<version>0.1.0</version>
</Emki_WebsiteUnrestrict>
</modules>
<frontend>
<enterprise>
<websiterestriction>
<full_action_names>
<generic>
<contacts_index_index />
</generic>
</full_action_names>
</websiterestriction>
</enterprise>
</frontend>
</config>
答案 1 :(得分:0)
尼克,这个功能有几个过程...
步骤1:您可以从控制器使用调度事件。
/**
* Retrieve customer session model object
*
* @return Mage_Customer_Model_Session
*/
protected function _getSession()
{
return Mage::getSingleton('customer/session');
}
public function preDispatch()
{
// a brute-force protection here would be nice
parent::preDispatch();
if (!$this->getRequest()->isDispatched()) {
return;
}
$action = $this->getRequest()->getActionName();
/* put all action of this controllers for check ,if any actions of list is exit then redirect to login page*/
$openActions = array(
'index',
'post',
'autoy',
'confirmation'
);
$pattern = '/^(' . implode('|', $openActions) . ')/i';
if (!preg_match($pattern, $action)) {
if (!$this->_getSession()->authenticate($this)) {
$this->setFlag('', 'no-dispatch', true);
}
} else {
$this->_getSession()->setNoReferer(true);
}
}
/**
* Action postdispatch
*
* Remove No-referer flag from customer session after each action
*/
public function postDispatch()
{
parent::postDispatch();
$this->_getSession()->unsNoReferer(false);
}
其他的事情是使用观察者