Сортировка Virtuemart по цене

Епта, обновил Virtuemart до 2.0.14. Опа, а как же восстановить все хаки и ничего не пропустить?!

И так, первая заметка по Virtuemart. На сегодня - сортировка Как писалось в превью новой версии блога, начинаю серию заметок по оптимизации магазина на Virtuemart. Хотя речь сегодня пойдет не совсем об оптимизации, а о усовершенствовании кода.

Задача стояла в следующем: По умолчанию магазин virtuemart имеет сортировку товара по цене, но при этом стоимость возрастает, а необходимо сортировать от большей к меньшей цене.

К сожалению разработчики Virtuemart не предусмотрели возможность выбора в настройках "сортировка" - возрастание, убывание (ASC,DESC) и по умолчанию всегда алфавитная сортировка. Т.к. Virtuemart обновляется довольно часто, особого желания делать возможность администрирования сегодняшнего хака нет желания, поэтому лезем напрямую в код.

Ну что ж, не беда!

Открываем сайт.ру/administrator/components/com_virtuemart/helpers/vmmodel.php ищем функцию checkFilterDir, приблизительно 220 строка

После

		if(empty($filter_order_Dir) or !in_array($filter_order_Dir, $this->_validFilterDir)){
// 			vmdebug('checkFilterDir: programmer choosed invalid ordering direction '.$filter_order_Dir,$this->_validFilterDir);
// 			vmTrace('checkFilterDir');
			$filter_order_Dir = $this->_selectedOrderingDir;
			$view = JRequest::getWord('view');
			$app = JFactory::getApplication();
			$app->setUserState( 'com_virtuemart.'.$view.'.filter_order_Dir',$filter_order_Dir);
		}
// 		vmdebug('checkFilterDir '.$filter_order_Dir);

Вставляем код сортировки

		if ( $this->_selectedOrdering == 'product_price' ) {
			if ($filter_order_Dir == 'ASC') {
				$filter_order_Dir = 'DESC';
			} else {
				$filter_order_Dir = 'ASC';
			}
		}

Собственно вот и все. Код определяет если выбрана сортировка по цене то он подменяет значения на противоположные.

Проверялось на Virtuemart 2.0.12-2.0.14

Я лентяй! Сообщите кто нибудь разработчикам, что бы расширили функционал, а я пока поваляюсь на диване попивая глинтвейн и предвкушая новый зимний сезон. Борд готов, жду снежных гор. ))))

P.S. Спасибо разработчикам наконец то сортировка virtuemart включена в настройки магазина.

  • Спасибо автору. Как временное решение, для меня пойдет. Возможно сделать сортировку по возрастанию цены, но товары без цен убрать вниз списка?
  • job
    Теоретически можно, если делать группировку в запросе БД. Кстати в последних версиях, сортировка по умолчанию реализована в ядре, поэтому статья уже неактуальна.
  • Спасибо, искал решение и нашел в этой статье. Спасибо, ещё раз!
  • Немного не в тему но может кто нибудь сталкивался. Сортирую товар по цене в категории но так как товар заведен в разных валютах сортировка работает не верно. К примеру если товар стоит 100$ а другой 1000 руб. то дешевле будет товар за 100$. Где можно исправить этот недочет? Это VM2
  • job
    Не сталкивался, но могу предположить что никак. Только если склад держать в одной валюте а в шаблоне вьювера выводить нужные товары конвертированные в свою валюту. но так же надо смотреть что там с корзиной будет происходить.
  • Ну я так понимаю он берет первоначальное значение суммы, как сделать чтобы он брал сумму после конвертации валюты. Вот пример страницы с кривой сортировкой: http://vesmarket.ru/komparatori-massi.html