代码之家  ›  专栏  ›  技术社区  ›  drmonkeyninja

使用域访问从Drupal站点上的节点编辑表单隐藏其他域的菜单

  •  1
  • drmonkeyninja  · 技术社区  · 16 年前

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

    有没有一个简单的方法来实现这一点?我猜我可以用一些钩子,但到目前为止我还不能识别它们。我不希望安装更多的模块来实现这一点,并且能够向当前站点添加一些代码来更改表单。这个网站正在与我们已经安装在上面的大量模块作斗争。

    3 回复  |  直到 13 年前
        1
  •  1
  •   cam8001    16 年前

    根据 readme 对于模块,需要在用户管理中设置一些特定的权限:

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

    根据我在许多月前使用该模块的经验,您可以检查global$user对象,并找出用户应该访问哪些域。然后,可以使用表单更改从“选择”框中删除不希望看到的任何选项。不过,和Drupal一样,最好让其他人编写代码——所以如果域模块提供了这个功能,就使用它吧!

        2
  •  1
  •   Peter    13 年前

    以下是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;
      }
    }
    
        3
  •  0
  •   Community Mohan Dere    9 年前

    最终找到了一种方法来修复我正在处理的特定项目:在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 .