从节点编辑表单Drupal站点使用域名访问隐藏其他域菜单
-
27-09-2019 - |
题
我在做一个活的Drupal站点的一些改进,是一个使用域访问模块运行一些微型网站的过程。我试图找到限制菜单的方式,用户可以发布内容,从节点编辑画面。在域之一的用户应当仅能够发布内容到与该域相关联的菜单。
是否有实现这一目标的一个简单的方法?我猜有一些钩子我可以使用,但到目前为止,我已经无法识别它们。我不希望有进一步的安装模块来实现这一点,并能够添加一些代码到当前站点改变形式。该网站有大量我们已经有模块的努力已经安装就可以了。
解决方案 3
最终发现这个固定为特定的项目,我一直在努力的一种方式:在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;
}
这限制了菜单选项,只是当前域的主菜单链接这正是我们想要的。
其他提示
要启用此功能,您应该授予“编辑域节点”和 (可选)“删除域节点的权限一些角色。然后分配 单个用户帐户关联到特定域将它们分配作为域编辑。
从我的经验很久以前与模块,你可以检查全局$用户对象,弄清域用户应该有机会获得。然后,您可以使用alter形式从选择框,你不希望他们看到删除任何选项。与往常一样使用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;
}
}
不隶属于 StackOverflow