如何清空Drupal 8中的隐形字段?

问题描述 投票:0回答:1

我在节点添加表单中使用这个方法来隐藏字段'field_obyavlenie_ploschad_uch'。

$form['field_obyavlenie_ploschad_uch']['#states'] = [
  'invisible' => [
    'select[name="field_obyavlenie_rubrika"]' => ['value' => '4524'],
  ]
];

但是如果用户在这个字段中输入任何值(在字段被隐藏之前),我在Node视图中看到这个值。

我正在尝试清空字段值,但它不工作。

$form['field_obyavlenie_ploschad_uch']['#states'] = [
  'empty' => [
    'select[name="field_obyavlenie_rubrika"]' => ['value' => '4524'],
  ]
];

如何清空不可见字段?

forms drupal drupal-8 drupal-forms
1个回答
0
投票

根据@2pha的评论,你不能用下面的方法实现这个功能 表格API声明.

如果你真的希望字段被清空,你将不得不添加一个自定义的验证或提交处理程序,并取消设置该值。

然而,如果你不太在意数据库中的持久化值,那么你可以在一个预处理钩子(函数)中利用它。对于你的用例来说,这将是一个节点预处理钩子,并在另一个字段具有特定值时取消设置应该不可见的值。

/**
 * Prepares variables for node templates.
 *
 * @see template_preprocess_node()
 */
function YOUR_MODULE_preprocess_node(&$variables) {
  /* @var $node \Drupal\node\NodeInterface */
  $node = $variables['node'];
  // Look for a node field value and act accordingly.
  if ($node->get('field_obyavlenie_rubrika')->value == '4524') {
    unset($variables['content']['foo']['field_obyavlenie_ploschad_uch']);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.