bitrix-i18n icon indicating copy to clipboard operation
bitrix-i18n copied to clipboard

Не сохраняет изменения элемента в инфоблоке 1.0

Open alex-didus opened this issue 7 years ago • 13 comments

  • при изменении элемента, выбрасывает ошибку: Запись для этой языковой версии уже существует
  • при создании все ок
  • работает только на инфоблоках 2.0
  • версия модуля 1.0.1

alex-didus avatar Mar 16 '17 13:03 alex-didus

Не получается воспроизвести. Можете показать содержимое таблиц notamedia_i18n_iblock и notamedia_i18n_iblock_public_id, прислать URL формы редактирования элемента (можно без домена), скриншот с настройками свойств инфоблока?

niksamokhvalov avatar Mar 17 '17 04:03 niksamokhvalov

Таблицы: notamedia_i18n_iblock, notamedia_i18n_iblock_public_id URL: bitrix/admin/iblock_element_edit.php?IBLOCK_ID=5&type=pages&ID=33&lang=ru&find_section_section=0&WF=Y

Настройка свойств элементов

при переключении типа инфоблока (2.0 на 1.0) url не меняеться

уточнение на инфоблоках 1.0 выбрасывает ошибку. на 2.0 работает нормально

alex-didus avatar Mar 17 '17 08:03 alex-didus

уточнение на инфоблоках 1.0 выбрасывает ошибку. на 2.0 работает нормально

А вот это да, мы не тестировали на ИБ 1.0. Нужно диагностировать и вносить исправления.

niksamokhvalov avatar Mar 28 '17 16:03 niksamokhvalov

2.0 аналогично. Создал запись, меняю свойство, жму применить и получаю:

Ошибка Запись для этой языковой версии уже существует

Dok11 avatar Mar 28 '17 20:03 Dok11

Не понимаю зачем на update делать checkDouble?

/**
     * @param array $fields Element fields.
     * @return bool
     */
    public static function onBeforeUpdate(&$fields)
    {
        if ($settings = InterfaceHelper::getIblockSettings($fields['IBLOCK_ID'])) {
            if (static::checkDoubleElement($fields, $settings, static::ACTION_UPDATE)) {
                return false;
            }
        }
    }

Dok11 avatar Mar 28 '17 20:03 Dok11

checkDouble нужен, что бы не было коллизий в БД. Он защищает от создания нескольких записей с одинаковым идентификатором и языком.

niksamokhvalov avatar Mar 29 '17 13:03 niksamokhvalov

Понятно. Получается checkDouble не понимает, сохраняю я новый элемент или обновляю текущий - он видит, что элемент уже есть с этими опциями и всё?

Dok11 avatar Mar 29 '17 14:03 Dok11

Ну метод имеет представление о том, какой экшен сейчас выполняется (создание или обновление), это видно по коду, приведённому тобой в примере выше. Исходный код метода можно посмотреть прямо на Гитхабе: https://github.com/notamedia/bitrix-i18n/blob/master/lib/iblock/elementhandler.php#L68-L117.

niksamokhvalov avatar Mar 29 '17 16:03 niksamokhvalov

Да да. Похоже, при создании элемента был выставлен неверный PUBLIC_ID (получилось 1, вместо ожидаемого 79, т.к. элементы с PUBLIC_ID уже были). При создании новых элементов он берет неверный PUBLIC_ID. Насколько я успел понять — после конвертации инфоблока таблица notamedia_i18n_iblock_public_id осталась пустой.

Dok11 avatar Mar 30 '17 08:03 Dok11

Заколхозил по-быстрому:

foreach($a as $item)
	$DB->Insert('notamedia_i18n_iblock_public_id', ['ID' => $item['PROPERTY_PUBLIC_ID_VALUE']]);

Просто записал PUBLIC_ID, которые должны были быть после конвертации

Dok11 avatar Apr 02 '17 12:04 Dok11

Ребят, проблема не в хранениях и потере PUBLIC_ID, а в том, что при update вы считываете пустое свойство, т.е. в $fields у вас находится свойство [#property_id#][#value_id#] и в случае первой версии (хранения в общей таблице) он формируется как int и является числом, а в случае второй версии он формируется как строка element_id:property_id, вот и получается, что при хранении в общей таблице значений нет. #4

gromdron avatar Aug 01 '17 11:08 gromdron

я развернул актуальный битрикс, завёл ИБ, поставил модуль, сконвертировал ИБ. при попытке создания нового элемента в другом языке — "языковая версия уже существует" при редактировании существующего элемента аналогично. таблица в БД — пустая.

mpa3b avatar Jun 21 '18 21:06 mpa3b

заполнил таблицу значениями PUBLIC_ID всех сконвертированных элементов — проблема не решилась

mpa3b avatar Jun 21 '18 21:06 mpa3b