使用 Drupal hook_form_alter 有条件地更改字段小部件类型
Conditionally change field widget type with Drupal hook_form_alter
我想使用 Drupal 8.7.6 中的 hook_form_alter 有条件地更改附加到节点的纯文本字段的小部件。
function mymodule_form_node_article_edit_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
$options=[
'test1' => 'AAA',
'test2' => 'BBB',
'test3' => 'CCC',
'test4' => 'DDD',
];
$form['field_testdrop']['widget'][0]['#type']='select';
$form['field_testdrop']['widget'][0]['#options'] = $options;
}
但是,在尝试保存节点时,出现以下错误:
错误:无法在 Drupal\Component\Utility\NestedArray::setValue() 中创建引用 to/from 字符串偏移(core/lib/Drupal/Component/Utility/NestedArray.php 的第 155 行)。
我能做些什么来防止这种情况发生?
这个作品:
$form['field_priority_email_id']['widget'][0]['value']['#type'] = 'select';
$form['field_priority_email_id']['widget'][0]['value']['#options'] = $options;
$form['field_priority_email_id']['widget'][0]['value']['#size'] = NULL;
您必须将“#size”设置为 NULL,否则 select 小部件将无法正确呈现。
我想使用 Drupal 8.7.6 中的 hook_form_alter 有条件地更改附加到节点的纯文本字段的小部件。
function mymodule_form_node_article_edit_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
$options=[
'test1' => 'AAA',
'test2' => 'BBB',
'test3' => 'CCC',
'test4' => 'DDD',
];
$form['field_testdrop']['widget'][0]['#type']='select';
$form['field_testdrop']['widget'][0]['#options'] = $options;
}
但是,在尝试保存节点时,出现以下错误:
错误:无法在 Drupal\Component\Utility\NestedArray::setValue() 中创建引用 to/from 字符串偏移(core/lib/Drupal/Component/Utility/NestedArray.php 的第 155 行)。
我能做些什么来防止这种情况发生?
这个作品:
$form['field_priority_email_id']['widget'][0]['value']['#type'] = 'select';
$form['field_priority_email_id']['widget'][0]['value']['#options'] = $options;
$form['field_priority_email_id']['widget'][0]['value']['#size'] = NULL;
您必须将“#size”设置为 NULL,否则 select 小部件将无法正确呈现。