经常遇到对特定的页面进行设置,但是drupal内置的就是access node 其他类型继承了这访问权限,比如要对特定的页面,不同的用户角色进行访问设置,默认的drupal模块还没有找到办法设置。除非去找drupal第三方模块来完成。
需求:需要对特定的一个页面,如果用户没有注册或者登陆就不给他看,比如是nid=2的页面,在后天添加信息的时候,这个页面内容属于机密性质的。
解决方案一:最简单的解决方法不用去写模块,只要在template.php (文件同你使用使用的主题目录在一起,如果没有可以自己新建一个)文件来设置。这个文件在前面也已经简单介绍过起功用和威力。
使用api:phptemplate_preprocess_node 主要是在这里处理,预处理函数。
drupal_set_message 函数:主要输出一段提示信息的。
drupal_access_denied 函数:看到名字就是知道,这是一个访问权限决绝时候处理N事项的函数
具体实施:
<?php
function phptemplate_preprocess_node(&$vars) {
global
$user; //定义全局用户
if(!$user->uid && $vars['node']->nid==2&&$vars['page']){//判断是否登录还有 $logged_in 这个变量,可以试试,加上一个page变量,主要是处理首页也无法访问的问题
drupal_set_message(t('请注册'));
drupal_set_message ("<a href=/user?destination=". substr( $_SERVER['REQUEST_URI'], 1 )."><b>点击这里登录或者注册</b></a>");
drupal_access_denied();
}
?>
}
效果如图

如果没有加上$vars['page']也是如上图所示,点击首页会出现的以上的状况。
评论
发表新评论