我有一个自定义字段,用于扩展ImageField以向图像添加复选框,类似于图像字段包含标题和alt信息的文本字段的方式。我可以显示复选框并在格式化页面上显示保存值,但是我无法弄清楚如何获取复选框的默认值。我的代码初始化了formElement函数中的复选框:
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$element = parent::formElement($items, $delta, $element, $form, $form_state);
$field_settings=$this->getFieldSettings();
// Setup how the show_image field is shown on the node edit form.
$element['#show_image'] = $field_settings["show_image"];
return $element;
}
然后在上传文件并调用进程回调函数时创建复选框字段:
/**
* {@inheritdoc}
*
* This is a callback from formElement. For example, this could be triggered from an ajax call.
*/
public static function process($element, FormStateInterface $form_state, $form) {
$item = $element['#value'];
$item['fids'] = $element['fids']['#value'];
$element["show_image"] = array(
'#default_value' => $element['#show_image'],
'#type' => 'checkbox',
'#title' => t('Show image on website'),
'#description' => t('This may be from an external source. Show on the website?'),
'#weight' => 10,
'#access' => (bool) $item['fids']
);
return parent::process($element, $form_state, $form);
}
更改#default_value键后,我似乎无法在新上传时显示默认设置“已选中”,并显示以前保存的节点中保存的正确值。例如,如果我设置
#default_value=>$element['#show_image']
无论用户保存什么,我都会获得默认值。如果我这样设置:
isset($item['show_image']) ? $item['show_image'] : $element['#show_image']
它始终显示已保存的值,从不显示默认值,即使在新上传时也是如此。所以我的问题是,如何显示新上传的默认值和更新的保存值?