我正在对使用Domain Access模块运行大量微型网站的实时Drupal站点进行一些改进。我正试图找到一种限制用户可以从节点编辑屏幕发布内容的菜单的方法。其中一个域上的用户应该只能将内容发布到与该域关联的菜单。
有一种简单的方法可以实现这一目标吗?我猜我可以使用一些钩子,但到目前为止我一直无法识别它们。我宁愿不必安装更多模块来实现这一点,并且能够在当前站点添加一些代码来改变表单。该网站正在努力应对我们必须在其上安装的大量模块。
答案 0 :(得分:1)
根据模块的readme,您需要在用户管理中设置一些特定权限:
要启用此功能,您应该授予“编辑域节点”和 (可选)对某些角色的“删除域节点”权限。然后分配 个人用户帐户到特定域,以将其分配为域编辑器。
根据我在许多月前使用该模块的经验,您可以检查全局$ user对象并找出用户应该访问哪些域。然后,您可以使用表单更改从选择框中删除您不希望他们看到的任何选项。和Drupal一样,最好让其他人编写代码 - 所以如果Domain模块提供了这个功能,请使用它!
答案 1 :(得分:1)
以下是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;
}
}
答案 2 :(得分:0)
最终为我正在处理的特定项目找到了解决这个问题的方法:在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;
}
这会将菜单选项限制为当前域的主要链接菜单,这正是我们想要的。