Virtuemart 2. Не удаляются дополнительные цены у товара.

Столкнулся с проблемой.

Создали дополнительную цену товара для определенной группы покупателей. Потом потребовалось удалить одну из цен. Жмем на крестик. Затем сохранить. Страница обновляется и мы видим цену на месте.

Ни ошибок, ни каких-то особых запросов на удаление цены нет. Все как обычно. Но цена не удаляется.

Полез в контроллер, отследил модель и метод в модели. Нашел участок и немного прифигел.

Файл модели

\administrator\components\com_virtuemart\models\product.php

Ищем строку:

if($pricesToStore){

Оказывается, при построении списка цен на удаление идентификатор цены из post запроса проверяется по всему массиву с информацие о цене.

        $toUnset = array();
        foreach($old_price_ids as $key => $oldprice){
          if(array_search($pricesToStore['virtuemart_product_price_id'], $oldprice )){
            $pricesToStore = array_merge($oldprice,$pricesToStore);
            $toUnset[] = $key;
          }
        }

$oldprice представляет из себя массив, где столбцы это значения информации о определенной цене.

Один из ее столбцов содержит id продукта, к которому относится цена.

Так вот в моем случае этот id совпал с id цены в таблице цен. В итоге цена, что должна быть удалена убиралась из массива на удаление.

Правильно будет проверить одно значение массива $oldprice - $oldprice['virtuemart_product_price_id']

Т.е. правильный код:

        $toUnset = array();
        foreach($old_price_ids as $key => $oldprice){
          if($pricesToStore['virtuemart_product_price_id'] == $oldprice['virtuemart_product_price_id'] ){
            $pricesToStore = array_merge($oldprice,$pricesToStore);
            $toUnset[] = $key;
          }
        }

Заметили ошибку, можете подсказать еще что-то? - Обращаемся сюда

Примеры работ

Информация