1

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

4

4 回答 4

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(); 
    }

笔记:

我没有测试我链接的教程,但浏览了它们,似乎还不错。

于 2013-04-09T13:41:07.220 回答
2

我最近介绍了创建一个新的 Magento 客户页面(自链接)。虽然教程本身对您的需求来说有点繁重,但它确实有一段神奇的代码来检查用户是否登录。

因此,假设您的“静态页面”在 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.");
}
于 2013-04-09T17:23:20.763 回答
0

Magento 中的任何页面都会有一个 MOdule 一个控制器和一个动作函数。

对于控制器操作功能中的特定页面,您应该应用一个代码来检查客户是否登录。如果未登录,则重定向到其他页面。

if(Mage::getSingleton('customer/session')->isLoggedIn())
{
    continue...
}
else
{
    redirect....
}
于 2013-04-09T17:50:13.973 回答
0

我不知道这个答案是否仍然相关,但是有一个免费的 Magento 扩展程序可以满足您的需求。它称为登录检查。

http://www.magentocommerce.com/magento-connect/login-check.html

于 2015-03-18T17:56:28.630 回答