【问题标题】:How do I hide a drupal 8 form element on default如何默认隐藏drupal 8表单元素
【发布时间】:2020-11-13 08:00:09
【问题描述】:

我正在尝试做一些在 drupal 中应该非常容易的事情。我只想在默认情况下简单地在 drupal 管理员中隐藏一个表单字段。

禁用该字段根本行不通。我找不到任何文档。令人难以置信的是,在 Drupal 中做这么简单的事情就这么难。

$form['field_name']['#states'] = [
  'visible' => [
    ':input[name="field_foo[0][target_id]"]' => ['value' => 'blah'],
  ],
  'invisible' => true,
];

可见部分有效。如果另一个字段具有特定值,则显示表单元素。

但是当您添加新节点时,我根本无法让它默认隐藏此字段。

【问题讨论】:

  • 不太确定您的问题,但条件字段模块会有所帮助吗?您还可以使用一些带有自定义模块和表单更改的 js。然后很容易用你的表单/节点做任何你需要的事情。

标签: forms drupal drupal-8


【解决方案1】:

加入表单元素数组 $element = ['#access' => FALSE,]:

$form['field_name'] = [ 
  '#access' => FALSE,
]

【讨论】:

  • #access 属性似乎破坏了价值。
【解决方案2】:

不需要设置不可见,除非满足可见条件,否则默认隐藏。此外,输入看起来是错误的,因为它应该是您要基于条件的元素中设置的 name 属性。

drupal.org documentation with an example.

例如

$form['field_name']['#states'] = [
  'visible' => [
    ':input[name="field_conditional_on"]' => ['value' => 'value_conditional_on'],
  ],
];

【讨论】:

    【解决方案3】:

    或者如果你只是想使用 CSS 的 display 属性隐藏它,你可以使用类似下面的东西,

    $form['field_name']['#states'] = [
      '#attributes' => array('style' => array('display: none;')),
     ];
    

    【讨论】:

      【解决方案4】:

      简单且不影响您的默认值(如果设置了默认值):

      $form['field_name']['#attributes']['class'][] = 'hidden';
      

      Drupal 核心将“显示:无;”此元素来自使用“隐藏”css 类的核心样式。

      【讨论】:

        猜你喜欢
        • 2023-02-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-25
        • 1970-01-01
        • 1970-01-01
        • 2020-10-12
        • 1970-01-01
        • 2016-07-03
        相关资源
        最近更新 更多