Подтвердить что ты не робот

Проблемы Сохранение большого количества идентификаторов атрибутов в Magento

У меня возникает проблема в системе Magento, где сохранение большого количества атрибутов либо вообще не работает, либо работает только частично. Это похоже на проблему, связанную с javascript, и я надеялся, что у кого-то из Qaru есть некоторая "известная наука" для решения этой ситуации или может указать мне в правильном направлении.

Основная проблема заключается в том, что система Magento имеет более 250 ярлыков атрибутов атрибутов цвета. Если пользователь-администратор пытается их устранить, выполнив следующие

  • Навигация в каталог → Атрибуты → Управление атрибутами
  • Выбор цветовых атрибутов
  • Нажав на вкладку "Управление ярлыками/вкладками"
  • Редактирование последней опции метки
  • Нажав "Сохранить и продолжить редактирование"

Случается одна из двух вещей.

В Google Chrome на OS X кнопка находится в состоянии "нажата", и через некоторое время Google Chrome "Эта страница не реагирует" появляется диалоговое окно "Kill".

В браузере на базе Mozilla на OS X нажатие кнопки заставляет браузер "думать" немного, но в конце концов он представляет форму. Однако в контроллер администратора отправляется только неполный список ярлыков атрибутов. Это означает, что пользователь может редактировать только первые 75 - 100 ярлыков, поскольку другие ярлыки никогда не отправляются.

У меня есть отчеты от пользователей Windows, описывающих второе поведение (браузеры неспецифичны)

Очевидные ответы - либо исследовать плохо исполняемый javascript, либо (стиль Гроуха Маркса) "не делайте этого". Прежде чем тратить время на профилирование/экскавацию javascript на этой странице, я надеялся, что есть какое-то известное решение для этого или конкретные знания о том, что вызывает проблему.

Magento CE 1.7.x, если он сопрягается.

Обновление: Проблемы с производительностью Javascript - это красная селедка. Они вызваны массивным количеством полей ввода, которые повторяются через

js/prototype/validation.js

В частности, в этом try catch block

    try {
        if(this.options.stopOnFirst) {
            result = Form.getElements(this.form).all(function(elm) {
                if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
                    return true;
                }
                return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
            }, this);
        } else {
            result = Form.getElements(this.form).collect(function(elm) {
                if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
                    return true;
                }
                return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
            }, this).all();
        }
    } catch (e) {
    }

Однако, даже если я коротко замыкаю эту функцию и возвращаю функцию true, поведение сохранения всех ярлыков сохраняется.

4b9b3361

Ответ 1

Вы можете попробовать переменную max_input_vars (введенную в PHP 5.3.9), по умолчанию она 1000, поэтому этого должно быть достаточно, но, возможно, ваша конфигурация использует меньшее количество. Но я полагаю, что форма просто не проходит из-за основных проблем с производительностью, которые вы испытываете.

О ярлыках опций: есть ли у них какие-либо изменения для пользователя-загрузчика для атрибута-образа? У нас была такая же проблема, когда мы установили расширение расширенной навигации GoMage в магазине с более чем 300 опциями производителя (расширение использует встроенный Flash-загрузчик Magento).

У нас не было расширения для этой функции, поэтому я отключил загрузчик, но предельное снижение производительности было, безусловно, загружено в 300 загружаемых Flash-роликов. Возможно, вы можете попробовать lazyloading загрузчика по каждой опционной основе, вставив кнопку или ссылку вместо фильма.

Надеемся, что это указывает на правильное (или точное) направление.

Ответ 2

[Working SOLUTION]

Привет, как упоминал Алан Шторм, этот ussue связан с логикой JS, которая обрабатывает валидацию входов метки метки. У меня была эта проблема в проекте одного из моих клиентов, и я написал простое расширение, которое его решает.

Вы можете загрузить exntesion здесь: https://github.com/Jarlssen/Jarlssen_FasterAttributeOptionEdit

В основном расширение заменяет исходный шаблон шаблона шаблоном. В моем шаблоне я переписал большую часть JS в нижней части шаблона и заменил входные данные формы на элементы div (псевдо-входы), поэтому, когда администратор нажимает на псевдо-вход, тогда его заменяет реальный ввод. Таким образом, мы избегаем проверки всех входов, и мы проверяем только отредактированные и новые добавленные записи. Расширение работает хорошо, если вы добавляете параметры на куски, например 500 записей на каждый атрибут save.

Надеюсь, это поможет.

Дополнительная информация: http://www.jarlssen.de/blog/2014/05/07/magento-timeout-saving-attribute-options-type-multiple-select-and-dropdown

Быстрый просмотр кода псевдогенера:

<tr class="option-row">
<?php foreach ($this->getStores() as $_store): ?>
    <td>
    <div class="replace-content pseudo-input input-text <?php if($_store->getId()==0): ?> required-option<?php endif; ?>" id="option[value][<?php echo $_value->getId() ?>][<?php echo $_store->getId() ?>]"><?php echo $_value->getData('store' . $_store->getId()) ?></div>
    </td>
    <?php endforeach; ?>
    <td>
        <div class="replace-content pseudo-input" id="option[order][<?php echo $_value->getId() ?>]"><?php echo $_value->getSortOrder() ?></div>
    </td>
    <td class="a-center default-checkbox">
        <div id="option_<?php echo $_value->getId() ?>" class="checkbox-radio-container replace-content">
        <?php if($_value->getChecked()) : ?>
            <input class="input-radio" type="<?php echo $defaultChooserInputType; ?>" name="default[]" value="<?php echo $_value->getId() ?>" checked <?php if ($this->getReadOnly()):?> disabled="disabled"<?php endif;?>/>
        <?php else : ?>
            <?php if('radio' == $defaultChooserInputType) : ?>
                <span class="fake-radio"></span>
            <?php else : ?>
                <span class="fake-checkbox"></span>
            <?php endif; ?>
        <?php endif; ?>
        </div>
    </td>
    <td class="a-left actions-column" id="delete_button_container_<?php echo $_value->getId() ?>">
        <div id="option[delete][<?php echo $_value->getId() ?>]" title="<?php echo $this->__('Delete') ?>" class="scalable left pseudo-delete-option">
        <span class="pseudo-delete-button" option_id="<?php echo $_value->getId(); ?>">
            <span>
                <span><?php echo $this->__('Delete') ?></span>
            </span>
        </span>
        </div>
    </td>
</tr>

Ответ 3

У меня была именно эта проблема (POST усечена), и она исходит из пакета suhosin с слишком небольшим значением POST. (или стандартный PHP post_max_size)

В php.ini проверьте эти значения и при необходимости увеличьте их значения (и перезапустите apache):

post_max_size
suhosin.post.max_vars
suhosin.request.max_vars

Для вашей второй проблемы (проблема производительности JS) я не могу помочь вам

Ответ 5

Откройте ваш сервер php.ini, найдите max_input_vars и установите его значение больше 2500, решив вашу проблему

; How many GET/POST/COOKIE input variables may be accepted
max_input_vars = 5000

Ответ 6

К сожалению!!

Я прошел эту же проблему, решение ниже.

Объяснение проблемы

Проблема

Клиент имеет очень большую базу шин, которые также имеют много автомобилей, добавленных к тому же, таким образом, чтобы мигрировать причалы между шинами и транспортными средствами, в таблицу было вставлено только 255 символов атрибутов идентификаторов, из-за чего она вызывала ошибку в миграции.

Magento вставляет строку с идентификаторами, разделенными символом

Проблема возникла в таблице "catalog_product_entity_varchar" в поле значения, которое по умолчанию составляет 255 символов, если я помещаю текст и разрешаю.

Примечание. Я знаю, что вы модифицируете БД, это не приятно, но, к сожалению, пришлось выполнить эту операцию.

Пример продукта

Шина 175/65R14

- > Сделать (+ - 200 опций)
- > Модель (+ - 4 мили)
- > Серия (+ - 15mil опций)
- > Год - > ...

АТТ