Хак Virtuemart и хаки

coolon, из шаблона, значит из components/com_virtuemart/themes/default/templates/
смотри вывод цены в папке browse для категорий и product_details для товаров
 
Всем доброго времени суток. Посоветуйте для виртуя SEF компонент получше.
Заранее спасибо.
 
Лучше всего не использовать сторонние компоненты так как они очень сильно нагружают сервер и создают варианты 404 ошибок, так как хранят соответствия ссылок в базе. Лучше всего использовать стандартные SEF Joomla. Преимущества в том что ссылки не теряются, сохраняется структура виртуальных папок, минимум запросов в базе. Рекомендую посмотреть в сторону этих роутеров

Там также приведена инструкция как все настроить
 
Помоему в туда пишу.
Вобщем давным давно искал выпрашивал на форумах как сделать так чтобы:
В категории была сортировка по цене и по наличию одновременно.
Т.е. товар выводится сначала который есть в наличии + с сортировкой по цене от меньшего к большему.
И после этого товара (на 2, 3 и т.д. странице) чтоб выводился которого нет в наличии.

Вобщем вскрываем файл administrator\components\com_virtuemart\html\shop_browse_queries.php
и примерно на строке 46-47 ищем то что начинается на case 'product_name'
и заменяем на
PHP:
    case 'product_name':
        $orderbyField = '`#__{vm}_product`.`product_in_stock` DESC, `#__{vm}_product_price`.`product_price`'; break;
Далее в админке ставим сортировку по умолчанию "по названию товара"
Все, готово)

З.Ы. Кнопка спасибо справа, реквизиты в подписи :-]
 
Помоему в туда пишу.
Вобщем давным давно искал выпрашивал на форумах как сделать так чтобы:
В категории была сортировка по цене и по наличию одновременно.
Т.е. товар выводится сначала который есть в наличии + с сортировкой по цене от меньшего к большему.
И после этого товара (на 2, 3 и т.д. странице) чтоб выводился которого нет в наличии.

Вобщем вскрываем файл administrator\components\com_virtuemart\html\shop_browse_queries.php
и примерно на строке 46-47 ищем то что начинается на case 'product_name'
и заменяем на
PHP:
    case 'product_name':
        $orderbyField = '`#__{vm}_product`.`product_in_stock` DESC, `#__{vm}_product_price`.`product_price`'; break;
Далее в админке ставим сортировку по умолчанию "по названию товара"
Все, готово)

З.Ы. Кнопка спасибо справа, реквизиты в подписи :-]



Ну в таком случае не проще ли априори сделать, чтобы сортировалось по наличию со всеми видами сортировок. Я думаю клиенту важнее в первую очередь видеть товары в наличии. То есть просто в конце switch выбора вида сортировок в administrator\components\com_virtuemart\html\shop_browse_queries.php добавить
`#__{vm}_product`.`product_in_stock` DESC НЕ РАБОТАЕТ
Ошибочка вышла, при такой конструкции могут быть ошибки. Решение
Код:
switch( $orderby ) {
    case 'product_list':
        $orderbyField = '`#__{vm}_product_category_xref`.`product_list`'; break;
    case 'product_name':
        $orderbyField = '`#__{vm}_product`.`product_in_stock` DESC, `#__{vm}_product`.`product_name`'; break;
    case 'product_price':
        $orderbyField = '`#__{vm}_product_price`.`product_price`'; break;
    case 'product_sku':
        $orderbyField = '`#__{vm}_product`.`product_in_stock` DESC, `#__{vm}_product`.`product_sku`'; break;
    case 'product_cdate':
        $orderbyField = '`#__{vm}_product`.`product_in_stock` DESC, `#__{vm}_product`.`cdate`'; break;
    default:
        $orderbyField = '`#__{vm}_product`.`product_in_stock` DESC, `#__{vm}_product`.`product_name`'; break;
}
 
Ну в таком случае не проще ли априори сделать, чтобы сортировалось по наличию со всеми видами сортировок. Я думаю клиенту важнее в первую очередь видеть товары в наличии. То есть просто в конце switch выбора вида сортировок в administrator\components\com_virtuemart\html\shop_browse_queries.php добавить
Код:
$orderbyField .= ' ,`#__{vm}_product`.`product_in_stock` DESC' ;
Все верно, товары в первую очередь и отображаются только те которые в наличии.
Я в PHP, MySQL не силен совершенно, так. методом тыка)) поэтому и предложил данный вариант.
Можно конечно сделать и по вашему предложению, просто мне нужен был только один вид сортировки (по цене), поэтому и выложил то что сделал, т.к. все у кого спрашивал никто ничего не знал за бесплатно))
 
Код:
$orderbyField .= ' ,`#__{vm}_product`.`product_in_stock` DESC' ;

Все конечно отлично, только вот у меня многих товаров 10-15, а многих 1-2-4, так вот оно берет всегда в начало отображения те товары, которых больше всего и их сортирует по имени, а потом берет товары на 1 меньше и их сортирует и так далее, пока в конце не выдаст товары в которых 0 на складе.
Это очень нарушает общий вид.

Можно сделать такую же сортировку? но без привязки к количеству, то есть чтобы если больше 1и больше товаров на складе, то все сортировало по имени (не зависимо от количества штук) а если 0, то выводило их уже в конце
 
Все конечно отлично, только вот у меня многих товаров 10-15, а многих 1-2-4, так вот оно берет всегда в начало отображения те товары, которых больше всего и их сортирует по имени, а потом берет товары на 1 меньше и их сортирует и так далее, пока в конце не выдаст товары в которых 0 на складе.
Это очень нарушает общий вид.

Можно сделать такую же сортировку? но без привязки к количеству, то есть чтобы если больше 1и больше товаров на складе, то все сортировало по имени (не зависимо от количества штук) а если 0, то выводило их уже в конце

ну как-то так
Код:
switch( $orderby ) {
    case 'product_list':
        $orderbyField .= '`#__{vm}_product_category_xref`.`product_list`'; break;
    case 'product_name':
        $orderbyField = '`#__{vm}_product`.`product_in_stock` = 0 ASC, ';
        $orderbyField .= '`#__{vm}_product`.`product_name`'; break;
    case 'product_price':
        $orderbyField .= '`#__{vm}_product_price`.`product_price`'; break;
    case 'product_sku':
        $orderbyField = '`#__{vm}_product`.`product_in_stock` = 0 ASC, ';
        $orderbyField .= '`#__{vm}_product`.`product_sku`'; break;
    case 'product_cdate':
        $orderbyField = '`#__{vm}_product`.`product_in_stock` = 0 ASC, ';
        $orderbyField .= '`#__{vm}_product`.`cdate`'; break;
    default:
        $orderbyField = '`#__{vm}_product`.`product_in_stock` = 0 ASC, ';
        $orderbyField .= '`#__{vm}_product`.`product_name`'; break;
}

НЕ РАБОТАЕТ при сортировке по цене по той причине, что таблица product_price присоединена через LEFT JOIN. C помощью ORDER BY нельзя сортировать одновременно по полям из разных таблиц.
 
Назад
Сверху