2010-06-14 23 views
1

我正在对使用域访问模块运行多个微型站点的现场Drupal站点进行一些改进。我试图找到一种限制用户可以从节点编辑屏幕发布内容的菜单。其中一个域的用户应该只能将内容发布到与该域关联的菜单。使用域访问从Drupal站点上的节点编辑表单隐藏其他域的菜单

有没有简单的方法来实现这一目标?我猜测我可以使用一些钩子,但到目前为止我一直无法识别它们。我宁愿不必安装更多的模块来实现这一点,并且能够向当前网站添加一些代码来改变表单。该网站正在为我们已经安装的大量模块而烦恼。

回答

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; 
} 

这限制了菜单选项,只是当前域的主链接菜单,这正是我们想要的。

感谢Fabian谁指给我the right direction earlier

1

按照readme的模块,你需要设置在用户管理的一些具体权限:

要启用此功能,您应该授予“编辑域节点”和 (可选)“删除域节点对某些角色的权限。然后将 个人用户帐户分配到特定域,以将其指定为域编辑器。

从我的经验很多月前的模块,你可以检查全球$用户对象,并找出用户应该有权访问哪些域。然后,您可以使用表单修改来删除选择框中您不希望他们看到的任何选项。尽管如此,最好让其他人编写代码 - 所以如果Domain模块提供了这个功能,那就使用它!

+0

谢谢,但是,这并不在我负责的设置工作。不幸的是,我正在与其他人的构建工作,并没有正确安装在第一位。我确定如果我可以获取当前域的菜单,那么我可以相应地修改表单。 – drmonkeyninja 2010-06-14 10:31:19

+0

你知道如何使用hook_form_alter并与全局的$ user对象进行交互吗? – cam8001 2010-06-14 16:00:16

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; 
    } 
}