Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
alex-didus opened this issue Mar 16, 2017 · 13 comments
Assignees
Labels

Comments

@alex-didus
Copy link

alex-didus commented Mar 16, 2017

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

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

@niksamokhvalov niksamokhvalov self-assigned this Mar 17, 2017
@alex-didus
Copy link
Author

alex-didus commented Mar 17, 2017

Таблицы: 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 работает нормально

@niksamokhvalov
Copy link
Member

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

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

@niksamokhvalov niksamokhvalov changed the title Не сохраняет изменения элемента инфоблока Не сохраняет изменения элемента в инфоблоке 1.0 Mar 28, 2017
@Dok11
Copy link

Dok11 commented Mar 28, 2017

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

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

@Dok11
Copy link

Dok11 commented Mar 28, 2017

Не понимаю зачем на 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;
            }
        }
    }

@niksamokhvalov
Copy link
Member

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

@Dok11
Copy link

Dok11 commented Mar 29, 2017

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

@niksamokhvalov
Copy link
Member

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

@Dok11
Copy link

Dok11 commented Mar 30, 2017

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

@Dok11
Copy link

Dok11 commented Apr 2, 2017

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

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

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

@gromdron
Copy link
Contributor

gromdron commented Aug 1, 2017

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

@mpa3b
Copy link

mpa3b commented Jun 21, 2018

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

@mpa3b
Copy link

mpa3b commented Jun 21, 2018

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Development

No branches or pull requests

5 participants