Не сохраняются введеные значения в случае ошибки
111ypuk opened this issue · 2 comments
в AdminEditHelper.php в
else {
unset($this->data);
$this->data = $_REQUEST['FIELDS']; //Заполняем, чтобы в случае ошибки сохранения поля не были пустыми
}
нало поправить т.к. например при сохранение с виджетом HL ИБ, веденные значения не хранятся в FIELDS. Или вообще убрать
Не прав был, проблема в другом, у input элементов HLIBlockFieldWidget атрибут namе равен коду пользовательского поля (name="UF_XYZ"),а не FIELDS['UF_XYZ'], как требуется для предыдущего коментария. Для правильной работы надо в HLIBlockFieldWidget::getEditHtml() перед
print $USER_FIELD_MANAGER->GetEditFormHTML($bVarsFromForm, $GLOBALS[$this->getCode()], $info);
добавить (для файла надо оставить как есть, а то при редактирование жалуется)
if ( $info['USER_TYPE_ID']!='file') {
$info['FIELD_NAME']='FIELDS['.$info['FIELD_NAME'].']';
}
//для CUserTypeBoolean, а то тоже не созраняются
if ($info['ENTITY_VALUE_ID'] < 1) $info['ENTITY_VALUE_ID'] = 1;
- Не сохраняются когда есть значение первичного ключа,
т.е. мы редактируем запись, а не создаём новую: lib/helper/AdminEditHelper.php:142 - Не сохраняются для множественных полей,
виджеты сMULTIPLE => 'Y'
передают значения в$_REQUEST[$code]
, тогда как AdminEditHelper собирает их только из $_REQUEST[FIELDS]
С множественными как-то странно, кажется, они всегда берут данные из БД, но не с формы: StringWidget.php:99.
Кроме того, есть виджеты, использующие $_REQUEST
напрямую вместо $this->data
(те, которым нужно несколько ключей в запросе и/или изменить их имена не позволяет используемое API битрикса (HLIBlockFieldWidget, VisualEditorWidget). Порядку это не способствует, конечно.