Ошибка при сортировке категории товара по "Цене"

  • 7 Ответов
  • 2185 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн AHTEPO

Добре друзья!
Нашёл такую ошибку в 2.0.20: при настройке "Порядок сортировки по умолчанию: Цена" в карточке любого товара вылазит ошибка:
Цитировать
vmError: getNeighborProducts Unknown column 'product_price' in 'order clause' SQL=SELECT `l`.`virtuemart_product_id`, `l`.`product_name` FROM `jm_virtuemart_products` as `p` JOIN `jm_virtuemart_products_ru_ru` as `l` using (`virtuemart_product_id`) JOIN `jm_virtuemart_product_categories` as `pc` using (`virtuemart_product_id`)   LEFT JOIN `jm_virtuemart_product_shoppergroups` as `psgr` on (`psgr`.`virtuemart_product_id`=`l`.`virtuemart_product_id`)   WHERE `virtuemart_category_id` = 16 and `slug` < "название товара" AND ( psgr.`virtuemart_shoppergroup_id`= "2" OR psgr.`virtuemart_shoppergroup_id` IS NULL ) AND p.`published`= 1 ORDER BY product_price DESC LIMIT 0,1

vmError: getNeighborProducts Unknown column 'product_price' in 'order clause' SQL=SELECT `l`.`virtuemart_product_id`, `l`.`product_name` FROM `jm_virtuemart_products` as `p` JOIN `jm_virtuemart_products_ru_ru` as `l` using (`virtuemart_product_id`) JOIN `jm_virtuemart_product_categories` as `pc` using (`virtuemart_product_id`)   LEFT JOIN `jm_virtuemart_product_shoppergroups` as `psgr` on (`psgr`.`virtuemart_product_id`=`l`.`virtuemart_product_id`)   WHERE `virtuemart_category_id` = 16 and `slug` > "название товара" AND ( psgr.`virtuemart_shoppergroup_id`= "2" OR psgr.`virtuemart_shoppergroup_id` IS NULL ) AND p.`published`= 1 ORDER BY product_price ASC LIMIT 0,1

Кто-нить встречал такое?

*

Оффлайн robert

В вашем запросе нет столбца "product_price", которрый, насколько я помню, находится в таблице "#__virtuemart_product_prices".
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Оффлайн AHTEPO

И как бороться с этой ошибкой? Нашёл ряд сообщений в Google, она проскальзывает у обновившихся на 2.0.20

*

Оффлайн robert

Обновите до 2.0.20b.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Оффлайн AHTEPO

Именно в ней эта ошибка и вылезла...

*

Оффлайн robert

Странно, у меня та же версия и нет вашей проблемы. Специально проверил administrator\components\com_virtuemart\models\product.php, все на месте
стр.385-388
Код: (php-brief) [Выделить]
case 'product_price':
//$filters[] = 'p.`virtuemart_product_id` = p.`virtuemart_product_id`';
$orderBy = ' ORDER BY `product_price` ';
$joinPrice = TRUE;
стр.462-464
Код: (php-brief) [Выделить]
if ($joinPrice == TRUE) {
$joinedTables .= ' LEFT JOIN `#__virtuemart_product_prices` as pp ON p.`virtuemart_product_id` = pp.`virtuemart_product_id` ';
}
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Оффлайн borro

  • ******
  • 1271
  • [+]21 / [-]0
  • желаю вам счастья
    • Просмотр профиля
    • Сайты, дизайн
Добрый день!

Подобная проблема, может уже кто разрешал её.
VirtueMart 3.0.9
Применил сортировку по цене, потом решил открыть карточку товара и получил страницу со следующей ошибкой:
Цитировать
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Фукс" на натуральном камне" ORDER BY product_price ASC LI' at line 1 SQL=SELECT p.`virtuemart_product_id`, `l`.`product_name` FROM `ytgb1_virtuemart_products` as p INNER JOIN `ytgb1_virtuemart_products_ru_ru` as l using (`virtuemart_product_id`) LEFT JOIN `ytgb1_virtuemart_product_shoppergroups` as ps ON p.`virtuemart_product_id` = `ps`.`virtuemart_product_id` LEFT JOIN `ytgb1_virtuemart_product_categories` as pc ON p.`virtuemart_product_id` = `pc`.`virtuemart_product_id` LEFT JOIN `ytgb1_virtuemart_product_prices` as pp ON p.`virtuemart_product_id` = pp.`virtuemart_product_id`
WHERE ( `pc`.`virtuemart_category_id` = 2 AND ( `ps`.`virtuemart_shoppergroup_id`= "1" OR `ps`.`virtuemart_shoppergroup_id` IS NULL ) AND p.`published`="1" ) AND p.`virtuemart_product_id`!="4011" AND product_price >= "Статуэтка "Фукс" на натуральном камне" ORDER BY product_price ASC LIMIT 1
как видно выражение product_price >= "Статуэтка "Фукс" совсем не к месту в построенном запросе.
Кто-нибудь сталкивался, почему так происходит?

Чтобы исправить ошибку вы должны открыть \administrator\components\com_virtuemart\models\product.php и в public function getNeighborProducts
перед кодом:
foreach ($neighbors as &$neighbor) {вставить код:
           if($whereorderByName=="product_price")
                foreach($product->allPrices as $key=>$value){
                    if($value['virtuemart_shoppergroup_id'] == Х ) {
                        $orderByValue = $value['product_price'];
                        break;
                    }
                }
где Х - это требуемое значение shoppergroup_id для искомой цены
« Последнее редактирование: 08.07.2015, 18:14:45 от borro »

*

Оффлайн gartes

Странно, у меня та же версия и нет вашей проблемы. А вполне нормально что может и не быть такой ошибки...
Это скорее всего там стоит модуль который переопределяет некоторые методы в модели product...
По отключайте все модули и смотрите на каком вылетит ошибка тот и виноват....

Скорее все либо mod под старую версию или под более новую... (что мало вероятно...)