CanView对数据扩展的影响-Silverstripe 3.1.12
我正在开发一个Silverstripe模块,允许用户订阅一个网站,该网站还发送月刊 单个组中将有2个级别的用户。此组中的所有用户都将能够登录到该网站,但某些内容将仅对具有活动付费订阅的用户可见 我有一个扩展主页对象的DataExtension。这允许我有一个布尔字段来指示仅订阅者的内容。我的意图是添加“canView”功能,它将对用户的订阅状态执行必要的检查,以对非活动成员隐藏链接,当然,对于管理员返回trueCanView对数据扩展的影响-Silverstripe 3.1.12,silverstripe,Silverstripe,我正在开发一个Silverstripe模块,允许用户订阅一个网站,该网站还发送月刊 单个组中将有2个级别的用户。此组中的所有用户都将能够登录到该网站,但某些内容将仅对具有活动付费订阅的用户可见 我有一个扩展主页对象的DataExtension。这允许我有一个布尔字段来指示仅订阅者的内容。我的意图是添加“canView”功能,它将对用户的订阅状态执行必要的检查,以对非活动成员隐藏链接,当然,对于管理员返回true class MemberPageExtension extends DataExte
class MemberPageExtension extends DataExtension {
static $db = array(
'SubscribersOnly' => 'Boolean'
);
public function canView(){
// perform subscription checks here
return false ; // result will be dependent on subscription status
}
}
不幸的是,canView()在DataExtension上似乎不起作用/不可用,所以现在我有点困惑于如何实现这一点
有没有一种方法可以使页面上的DataExtension可以使用“can”函数,或者产生类似的效果,而无需在模板中使用if语句?引用以下内容:
如果扩展需要修改一个现有的方法,它只需要一点点
更棘手。它要求您要自定义的方法具有
在要修改的位置提供了一个扩展挂钩
数据
我刚刚检查了cms/code/model/SiteTree.php
代码,发现了以下几行代码:
// Standard mechanism for accepting permission changes from extensions
$extended = $this->extendedCan('canView', $member);
if($extended !== null) return $extended;
所以。。。是的,您可以修改canView
行为,并通过声明canView
函数(就像您所做的那样)
您的问题在其他地方:您必须向我们展示如何定义canView
补遗
一个快速测试:我刚刚在一个简单的SilverStripe安装中将此代码保存为mysite/code/Page.php
<?php
class Page extends SiteTree {
}
class Page_Controller extends ContentController {
}
class MemberPageExtension extends DataExtension {
public function canView(){
// perform subscription checks here
return false ; // result will be dependent on subscription status
}
}
$instance = new Page();
Debug::show($instance->canView());
Page::add_extension('MemberPageExtension');
$instance = new Page();
Debug::show($instance->canView());
看看吧,谢谢你的回复。我编辑了原始帖子,展示了我通常如何使用canView()
函数。它在这个实例中不起作用,但是提供的代码没有显示真实的代码:它只是一个占位符函数。我刚刚添加了一个代码示例,它显示扩展上的canView
。看起来你已经对这个问题下了决心,这对调试非常不利。