DigitalWand / digitalwand.admin_helper

API для сборки кастомных админок в Битриксе
MIT License
156 stars 53 forks source link

Проблема с виджетом ComboBoxWidget в множественном режиме. #39

Open rem13 opened 8 years ago

rem13 commented 8 years ago

При любом изменении элемента, значения для множественного поля ComboBoxWidget создаются заново.

Т.к. данный виджет не передаёт id текущего значения в таблице, и мы всегда попадаем в блок создания связанных данных.

public function processEditAction()
{
    if ($this->getSettings('MULTIPLE')) {
        $sphere = $this->data[$this->getCode()];
        unset($this->data[$this->getCode()]);

        foreach ($sphere as $sphereKey) {
            $this->data[$this->getCode()][] = array('VALUE' => $sphereKey);
        }
    }

    parent::processEditAction();
}

Т.е. empty($referenceData['ID']) всегда true.

foreach ($referenceDataSet as $referenceData) {
    if (empty($referenceData[$fieldWidget->getMultipleField('ID')])) {
        // Создание связанных данных
        if (!empty($referenceData[$fieldWidget->getMultipleField('VALUE')])) {
            $result = $this->createReferenceData($reference, $referenceData);

            if ($result->isSuccess()) {
                $processedDataIds[] = $result->getId();
            } else {
                break; // ошибка, прерываем обработку данных
            }
        }
    } else {
        // Обновление связанных данных
        $result = $this->updateReferenceData($reference, $referenceData, $referenceStaleDataSet);

        if ($result->isSuccess()) {
            $processedDataIds[] = $referenceData[$fieldWidget->getMultipleField('ID')];
        } else {
            break; // ошибка, прерываем обработку данных
        }
    }
}
denx-b commented 6 years ago

@ASGAlex, если ещё никто не решил, хотел бы вернуться к этой задаче. Подтверждаете ли вы вообще наличие бага? Мои предыдущие ишью были отклонены. Почему? Ответьте, пожалуйста, и я учту это в новом пулл-реквесте.

ASGAlex commented 6 years ago

@denx-b по предыдущим багрепортам: один мерджреквест был принят и замерджен, другой вы сами закрыли. Больше никаких от вас не вижу... На счет бага - там со связанными данными все как-то совсем плохо. Недавно залез в код, поднял тестовый пример - в общем, похоже, авторы ориентировались на некое ограниченное число кейсов, а остальное работает (или не работает) исключительно "по инерции". В общем, дописывать/разгребать там придётся прилично. Я начал пока с OrmElementWidget, но и у ComboBox, видимо, болезнь та же.

denx-b commented 6 years ago

@ASGAlex, ну как же :) Про тот, что был смерджен я помню и да, был, который я сам отменил. Но вот решение этой ишью https://github.com/DigitalWand/digitalwand.admin_helper/pull/106

Так давно было, я уже сам не помню нюансов, но это работало и очень хорошо, я задачу решил дважды, немного разными способами. Поэтому #106 совсем хорошо должен быть.