按内容类型或用户角色禁用垂直选项卡


10

某些用户可能只能编辑节点编辑表单上垂直选项卡中显示的字段集之一。在这种情况下,使用垂直选项卡看起来很愚蠢,因为只有一个垂直选项卡可供选择。看截图:

屏幕截图

因此,是否可以按用户角色禁用垂直选项卡?或者,除非对某些内容类型完全禁用它们?对于我的用例,我只希望“位置”不显示在垂直选项卡中。

我尝试了“可渲染字段”和“字段组”,但是它们对表格的管理不正确(我认为是越野车)。排列字段无法分离出“垂直制表符”。


你有没有解决这个问题?尝试使用ubercart产品标签执行相同操作。

Answers:


7

有几种方法可以做到这一点:

  1. 您可以使用Renderable Elements模块(如上所述)。它使您可以在安装中注册任何构建版本,并通过Field UI管理显示。它将使(附加)元素可用于管理表单/显示屏上的现有实体,或者您可以例如注册联系人表单并通过Field UI重新排列字段。目前可以在表单上正常工作,对其他表单的支持将在第二次迭代中出现。

  2. 或将以下内容添加到您的自定义模块中:

    $config['yourcontenttype_node_form'] = FALSE;
    variable_set('vertical_tabs_forms', $config);
  3. 沙箱模块禁用垂直制表符

这是涉及此的核心问题


正如我在问题中说的那样,可渲染元素对我不起作用。它仍处于Alpha阶段,Location中存在一个已知的错误。因此,这不适用于我的情况。否则,是的,我认为这会起作用。如果将来修复该错误,则可渲染元素可能是解决此问题的最佳方法。
杰伊

抱歉,我只是略过您的问题,完全错过了您对renderable elements模块的引用。话虽这么说,开发版本的工作原理很吸引人。放手

嗯。。好。如果没有其他选择,我将尝试使用开发版本。现在暂时不公开。
2012年

我已经用更多选项修改了上面的答案。

1
你是对的。我只是尝试过,但在D7中却不像在D6中那样。不幸的是,如果可渲染元素不起作用并且您对自己的模块或沙盒模块不满意,那么我不确定还有什么。

6

您还可以使用#access检查来防止人们看到垂直标签。

$form['additional_settings']['#access'] = FALSE;

只需将其添加到一个挂钩表单更改中,或在表单的加载和呈现之间进行添加。之后,您可以调用render($ form)获取标记。


2

我在前面提到的线程中写了一个简单的可能的解决方案:https : //drupal.org/node/1048644#comment-7822687。为了方便起见,我将其粘贴在这里。

有一种简单的方法可以通过在hook_form_alter()hook_form_FORM_ID_alter()的实现中将$form['additional_settings']['#type']变量的值更改为来禁用表单上的垂直制表符如果等于)。 您无需更改访问设置或递归遍历整个数组,后者会不必要地消耗过多的资源。 (在Drupal 7.23中进行了测试。)'fieldset''vertical_tabs'
$form

/**
 * Disable Vertical tabs on a form with simply changing the value of $form['additional_settings']['#type']
 * @see https://drupal.org/node/1048644
 */
function form_disable_vertical_tabs(&$form){
  // originally $form['additional_settings']['#type'] equals to 'vertical_tabs'
  if(isset($form['additional_settings']['#type']) && ($form['additional_settings']['#type'] === 'vertical_tabs')){
    $form['additional_settings']['#type'] = 'fieldset';
  }
}

/**
 * Implements hook_form_alter().
 */
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {

  if($form_id == 'my_form_id'){
    // disable vertical tabs for this form
    form_disable_vertical_tabs($form);
  }
}

当然,仅此而已MYMODULEORTHEMENAME即可替换为您自己的模块或主题的名称(后者在template.php文件中)以及my_form_id表单的ID。


您还可以仅对不具有管理员角色的用户禁用垂直字段:

/**
 * Implements hook_form_alter().
 */
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {

  global $user;
  $is_administrator = in_array('administrator', array_values($user->roles));

  if($form_id == 'my_form_id'){
    // if $user does NOT have the administrator role.
    if (!$is_administrator) {
      // disable vertical tabs for this form
      form_disable_vertical_tabs($form);
    }
  }
}

如果用户感兴趣,我附着的贴片(它与上述相同),以Dripman的沙箱模块:#2080739:简化与只是改变了禁用垂直片的方法$form['additional_settings']['#type']'fieldset'


出色的解决方案,@ Sk8erPeter。我想知道是否可以在不设置'#access'= FALSE的情况下隐藏其他设置,因为这样会丢失默认设置所设置的值,例如url别名和发布状态。
2014年

0

目前不支持可渲染元素,并且在项目页面上承认它与其他一些贡献的模块存在冲突,因此在生产现场我不会依赖它。

此线程解决了如何完全禁用垂直制表符的问题。

Dripman创建了一个简单的沙盒模块以完全禁用垂直选项卡。

根据您期望的编码参与水平,Dripman的模块应易于定制,以根据字段/角色进行选择性选择。

抱歉@nicoz给出了简洁的答案


0

您可以使用“ 垂直标签可见性 ”模块。

此模块有助于管理内容类型添加/编辑表单上的垂直选项卡可见性。

要管理垂直选项卡在内容类型上的可见性,请添加/编辑表单。只需访问/admin/config/user-interface/vertical-tabs-visibility 页面并选择内容类型。对于选中的内容类型,将禁用节点添加/编辑表单上的垂直选项卡。

当前模块在沙箱中


0

对于我的用例,我试图禁用在节点编辑表单上“ 发布选项”部分上应用的垂直选项卡(因为这是一组特定的用户有权访问的唯一字段集):

// Place somewhere in MYMODULE_form_alter()...
$form['additional_settings']['#type'] = 'fieldset';
$form['additional_settings']['#collapsible'] = FALSE;
$form['options']['#collapsible'] = FALSE;

为了澄清additional_settings #collapsible起见,不仅需要将其设置为FALSE,而且其中的任何元素还必须具有#collapsible set toFALSE , in my case that was theoptions`元素。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.