2013-04-09 161 views

回答

4

您需要创建自己的模块并重写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 
    } 
} 

如果除此之外,你要设置哪些页面是公开可见的或直接从管理面板保护,您需要在编辑内容管理页面中添加自定义字段。

这里是如何做到这一点的教程: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(); 
    } 

注:

我没有测试过我链接的教程,但通过他们浏览,似乎很好。

3

我最近报道了创建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."); 
} 
0

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

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

if(Mage::getSingleton('customer/session')->isLoggedIn()) 
{ 
    continue... 
} 
else 
{ 
    redirect.... 
} 
相关问题