如何在Magento中限制对未登录用户的页面的访问

ber*_*ssa 1 php magento

我想限制对未登录用户访问Magento中的特定静态页面.有没有人有办法解决吗.我看了一些扩展(http://www.magentocommerce.com/magento-connect/MageParts/extension/3842/restrict_cms_pageshttp://www.magentocommerce.com/magento-connect/advanced-permissions.html),但是我真正需要的是更简单.有什么建议吗?谢谢

Vla*_*eda 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
    }
}
Run Code Online (Sandbox Code Playgroud)

如果除此之外,您希望直接从管理面板设置哪些页面可公开显示或受保护,则需要在编辑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(); 
    }
Run Code Online (Sandbox Code Playgroud)

注意:

我没有测试我链接的教程,但是浏览了它们,似乎没问题.