drupal 以编程方式禁用或删除节点创建节点链接
Posted
技术标签:
【中文标题】drupal 以编程方式禁用或删除节点创建节点链接【英文标题】:drupal programmatically disable or remove node create node link(s) 【发布时间】:2011-11-29 12:17:13 【问题描述】:在有机群组的背景下,我正在编写一个模块,该模块将阻止非群组成员的用户将群组帖子添加到该群组中。
我的模块当前设置了必要的权限并检测用户是否具有权限。
因此,当用户查看群组页面时,我想禁用/删除标准链接以创建群组帖子。
【问题讨论】:
【参考方案1】:试试这个方法。
function mymodule_menu_alter(&$items)
global $user;
// Perform code for finding out users permissions.
// lets suppose we set true or false to $restricted after all
if ($restricted && isset($items['node/add/yourtype']))
$items['node/add/yourtype']['access arguments'] = FALSE;
// or unset($items['node/add/yourtype']) to remove item for user
【讨论】:
这帮助很大。仍在努力,但我认为这是我一直在寻找的解决方案。谢谢!【参考方案2】:如果我理解正确,您不希望某些用户创建内容类型。
所以步骤是:
1) 创建一个菜单挂钩。
// Here we make sure if the user goes to for creating this node type
// we can use the appropriate call back function to stop it.
function yourmodoule_menu()
$items = array();
$items['node/add/page'] = array(
'page arguments' => array('yourmodule_additional_actions'),
'access arguments' => array('administer create content')
);
2) 然后做一个权限钩子来确保只有特定的用户有这个权限。
// drupal will only allow access to to path 'node/add/page' with people
// who have access given by you.
function yourmodule_permission()
return array(
'add content' => array(
'title' => t('Administer create conent'),
'description' => t('Perform administration tasks and create content')
)
)
3) 为拥有权限的用户编写代码。
// Only affter they have this permisson drupal will allow them access
// to the below function.
function yourmodule_additional_actions()
// this code will only execute if the user has the permission
// "Administer create conent"
【讨论】:
感谢您非常详细的建议 - 非常感谢。但是 hook_menu 将对目标用户的所有组产生影响。我需要的是一种通过检测目标用户是否是他们当前访问的组的成员来有选择地处理目标用户的方法 我似乎找不到有太多同名的模块。粘贴链接,让我看看他们的代码。也许我可以提出一个替代方案 对不起,又不清楚了。我正在开发模块。我没有在 Organic 组或任何插件模块中找到所需的功能,所以我开发了一个 我认为它很简单。因此,当节点(组页面)加载时,检查用户是否属于该组,如果不返回错误。你可以为此使用 node_load node_view 钩子以上是关于drupal 以编程方式禁用或删除节点创建节点链接的主要内容,如果未能解决你的问题,请参考以下文章
删除以编程方式创建的部分 TreeView 节点(来自 XML)