隐藏Drupal 8中的最后一项多值字段窗体小部件

时间:2018-03-06 16:51:37

标签: drupal field drupal-8 multivalue

有没有人知道是否有办法隐藏表格中的最后一项多值字段,以便只有"添加更多"按钮显示,并且不显示空的增量。我已经尝试隐藏项目,如果它在hook_form_alter中为空,但是add-more按钮会添加两个项目。似乎在ajax进程中某个地方的delta值增加了一倍,并且我无法阻止第一个ajax调用然后添加两个项而不是一个,即使我取消设置

$form['myfield']['widget'][0]

有人有过这方面的成功吗?否则我将不得不使用Paragraphs。感谢。

2 个答案:

答案 0 :(得分:0)

对于Drupal 8:

function mymodule_form_alter(&$form, FormStateInterface , $form_id) {
    if($form_id == 'myFormID'){
        $field_name='my_field_name';
        if (!empty($form[$field_name])) {
            $max_delta = $form[$field_name]['widget']['#max_delta'];
            unset($form[$field_name]['widget'][$max_delta]);
            $form[$field_name]['widget']['#max_delta'] = $max_delta-1; 
        }
    }
}

答案 1 :(得分:0)

感谢jmux。以下是仅在实体编辑表单上删除空的下一个小部件并将其保留在实体添加表单上的方法:

function HOOK_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  $fieldname = 'field_fieldname';
  if (isset($form[$fieldname])) {
    $max_delta = $form[$fieldname]['widget']['#max_delta'];
    if ($form_state->getBuildInfo()['callback_object']->getEntity()->isNew() == FALSE && isset($form[$fieldname]['widget'][1])) {
      unset($form[$fieldname]['widget'][$max_delta]);
      $form[$fieldname]['widget']['#max_delta'] = $max_delta-1; 
    }
  }
}

如果您在多个实体上都没有该字段,请使用HOOK_form_FORM_ID_alter()