В настройках Virtuemart разработчики позволили нам выбирать по какому полю мы хотим сортировать товары по умолчанию. Но почему-то не дали нам возможность менять направление сортировки товаров в категории по умолчанию.
Она всегда DESC - от большего к меньшему. Когда мы выбираем поле для сортировки "Последние поступления" нас такой вариант устраивает - покупатель сначала видит самые свежие товары. Но когда мы выбираем поле для сортировки "Цена" - получается совсем неприятная картина - пугаем покупателя самыми дорогими товарами.
Я предлагаю исправить это досадное недоразумение и ввести в настройку Virtuemart выбор направления сортировки товара по умолчанию:
Так как первый Virtuemart уже точно не будет обновляться - с чистой совестью правим файлы компонента.
Сначала создадим нужную переменную в конфиге.
Открываем administrator\components\com_virtuemart\virtuemart.cfg.php и после 60 строки добавляем строку
define('VM_BROWSE_ORDERBY_FIELD_DESC', 'DESC');
Закрываем, сохраняем.
Теперь идем в класс administrator\components\com_virtuemart\classes\ps_config.php и после строки (примерно 76-я)
"VM_BROWSE_ORDERBY_FIELD" => "conf_VM_BROWSE_ORDERBY_FIELD",
добавляем
"VM_BROWSE_ORDERBY_FIELD_DESC" => "conf_VM_BROWSE_ORDERBY_FIELD_DESC",
Закрываем, сохраняем.
Отображаем новую опцию в настройке Virtuemart.
Открываем administrator\components\com_virtuemart\html\admin.show_cfg.php и примерно после 782 строки после
<td><?php echo vmToolTip( $VM_LANG->_('PHPSHOP_ADMIN_CFG_NAV_AT_TOP_TIP') ) ?></td> </tr>
добавляем новый переключатель
<tr> <td class="labelcell">Направление сортировки товаров по умолчанию</td> <td> <select class="inputbox" name="conf_VM_BROWSE_ORDERBY_FIELD_DESC"> <option value="DESC" <?php if (@VM_BROWSE_ORDERBY_FIELD_DESC == 'DESC') echo "selected=\"selected\""; ?>>От большего к меньшему</option> <option value="ASC" <?php if (@VM_BROWSE_ORDERBY_FIELD_DESC == 'ASC') echo "selected=\"selected\""; ?>>От меньшего к большему</option> </select> </td> <td><?php echo vmToolTip( 'Укажите направление сортировки товаров в категории по умолчанию' ) ?></td> </tr>
Закрываем, сохраняем. Можем попереключать - проверить что выбранное значение сохраняется.
Нам осталось сделать так чтобы новая опция влияла на направление сортировки товара - открываем administrator\components\com_virtuemart\html\shop_browse_queries.php и в самом начале вместо
$DescOrderBy = strtoupper($vm_mainframe->getUserStateFromRequest( "browse{$keyword}{$category_id}{$manufacturer_id}DescOrderBy", 'DescOrderBy', "DESC" ));
меняем в самом конце DESC на наш переключатель:
$DescOrderBy = strtoupper($vm_mainframe->getUserStateFromRequest( "browse{$keyword}{$category_id}{$manufacturer_id}DescOrderBy", 'DescOrderBy', VM_BROWSE_ORDERBY_FIELD_DESC ));
Закрываем. Сохраняем. Наслаждаемся.