我正在对使用域访问模块运行多个微型站点的实时 Drupal 站点进行一些改进。我正在尝试找到一种方法来限制用户可以从节点编辑屏幕发布内容的菜单。其中一个域上的用户应该只能将内容发布到与该域关联的菜单。
有没有一种简单的方法可以实现这一目标?我猜有一些我可以使用的钩子,但到目前为止我无法识别它们。我宁愿不必安装更多模块来实现这一点,并且能够向当前站点添加一些代码来更改表单。该站点正在努力处理我们必须在其上安装的大量模块。
我正在对使用域访问模块运行多个微型站点的实时 Drupal 站点进行一些改进。我正在尝试找到一种方法来限制用户可以从节点编辑屏幕发布内容的菜单。其中一个域上的用户应该只能将内容发布到与该域关联的菜单。
有没有一种简单的方法可以实现这一目标?我猜有一些我可以使用的钩子,但到目前为止我无法识别它们。我宁愿不必安装更多模块来实现这一点,并且能够向当前站点添加一些代码来更改表单。该站点正在努力处理我们必须在其上安装的大量模块。
以下是 Drupal 7 的一些更新代码:
/**
* Implements hook_form_FORM_ID_alter().
*/
function MYMODULE_form_page_node_form_alter(&$form, &$form_state) {
global $_domain;
if (isset($_domain['domain_id'])) { // only display domain's primary links
$menus[domain_conf_variable_get($_domain['domain_id'], 'menu_main_links_source')] = $_domain['sitename'].' Main menu';
}
if (isset($menus)) {
$options = menu_parent_options($menus, $form['#node']->type);
$form['menu']['link']['parent']['#options'] = $options;
}
}
根据模块的自述文件,您需要在用户管理中设置一些特定的权限:
要启用此功能,您应该向某些角色授予“编辑域节点”和(可选)“删除域节点”权限。然后将单个用户帐户分配给特定域以将它们分配为域编辑器。
根据我很多个月前使用该模块的经验,您可以检查全局 $user 对象并确定用户应该有权访问哪些域。然后,您可以使用表单更改从选择框中删除您不希望他们看到的任何选项。尽管如此,与 Drupal 一样,最好让其他人编写代码 - 所以如果 Domain 模块提供此功能,请使用它!
最终为我一直在从事的特定项目找到了解决此问题的方法:在 module_form_alter 我添加了以下内容:-
global $_domain;
if (isset($_domain['domain_id'])) { // only display domain's primary links
$menus[domain_conf_variable_get($_domain['domain_id']
,'menu_primary_links_source')] = $_domain['sitename'].' Primary links';
}
if ( isset($menus) ) {
$options = menu_parent_options($menus, $form['menu']['#item']);
$form['menu']['parent']['#options'] = $options;
}
这将菜单选项限制为仅当前域的主链接菜单,这正是我们想要的。