我想限制对未登录用户访问Magento中的特定静态页面。有没有人有办法解决吗。我查看了一些扩展(http://www.magentocommerce.com/magento-connect/MageParts/extension/3842/restrict_cms_pages和http://www.magentocommerce.com/magento-connect/advanced-permissions.html),但我真正需要的更简单。 有什么建议吗? 感谢
答案 0 :(得分:6)
您需要创建自己的模块并重写Mage_Cms_PageController
控制器(app / code / core / Mage / Cms / controllers / PageController.php中的位置)。
以下是有关如何执行此操作的教程:http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/how_to_overload_a_controller
所以你创建了自己的模块,让我们说CustomCms/PageAccess
。您需要具有以下控制器:
class CustomCms_PageAccess_PageController extends Mage_Cms_PageController
{
public function viewAction()
{
$pageId = $this->getRequest()->getParam('id', false);
if (Mage::getSingleton('customer/session')->isLoggedIn() || $this->publiclyVisible($pageId) ) {
parent::viewAction(); // default action
} else {
$this->_forward('noRoute'); // 404
}
}
/*
* this function should be in a helper
* !!! Return false if the page should be visible only to logged in users !!!
* @return bool
*/
public function publiclyVisible($pageId) {
return true; // here is where you check the page id
}
}
如果除此之外,您希望直接从管理面板设置哪些页面可公开显示或受保护,则需要在编辑cms页面中添加自定义字段。
以下是有关如何执行此操作的教程:http://blog.flexishore.com/2011/08/add-custom-field-to-cms-page/
之后,您需要修改publiclyVisible
功能:
public function publiclyVisible($pageId) {
$page = Mage::getModel('cms/page')->load(intval($pageId));
// I'm asuming the new field is is_publicly_visible
return (bool)$page->getIsPubliclyVisible();
}
注意:强>
我没有测试过我链接的教程,但是浏览过它们,看起来很好。
答案 1 :(得分:2)
我最近介绍了创建a new Magento customer page(自我链接)。虽然教程本身对您的需求来说有点重要,但它确实具有神奇的代码行来检查用户是否已登录。
因此,假设您的“静态页面”在Magento环境中运行,以下PHP代码可以帮助您实现目标。
if(Mage::getSingleton('customer/session')->isLoggedIn())
{
var_dump("Is Logged In");
}
else
{
var_dump("In Not Logged in. Exit or redirect or something.");
}
答案 2 :(得分:0)
对于Magento中的任何页面,都会有一个MOdule控制器和一个动作功能。
对于控制器操作功能中的特定页面,您应该应用一个代码来检查客户是否已登录。 如果没有登录重定向到其他页面。
if(Mage::getSingleton('customer/session')->isLoggedIn())
{
continue...
}
else
{
redirect....
}
答案 3 :(得分:0)
我不知道这个答案是否仍然相关,但有一个免费的Magento扩展可以满足您的需求。它被称为登录检查。
http://www.magentocommerce.com/magento-connect/login-check.html