DigitalWand/digitalwand.admin_helper

Не сохраняются введеные значения в случае ошибки

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). Порядку это не способствует, конечно.