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;
}
}
Заметили ошибку, можете подсказать еще что-то? - Обращаемся сюда