Собственно вопрос - как сделать сортировку товара в категории по наличию на складе - сначала сортируются товары в наличии на складе, потом выводятся товары, которые могут быть привезены под заказ или просто на данный момент их нет в наличии. Для примера http://www.alienbike.ru/index.php?categoryID=76 Хотелось чтобы подобным же образом выводились товары. Спасибо всем за ответы!
можно переписать запрос к БД с сортировкой по нескольким полям оставить те которые там были (в сортировке) и добавить поле products_in_stok из тфблицы _products ну уж а где это делать поищи
Решение проблемы следующее (найдено в инете и чуть чуть подправлено под меня): File: administratorcomponentscom_virtuemarthtmladmin.show_cfg.php Find Код (CODE): <tr> <td class="labelcell"><?php echo $VM_LANG->_('VM_BROWSE_ORDERBY_DEFAULT_FIELD_LBL') ?></td> <td> <select class="inputbox" name="conf_VM_BROWSE_ORDERBY_FIELD"> <option value="product_name" <?php if (@VM_BROWSE_ORDERBY_FIELD == 'product_name') echo "selected="selected""; ?>><?php echo $VM_LANG->_('PHPSHOP_PRODUCT_NAME_TITLE') ?></option> <option value="product_price" <?php if (@VM_BROWSE_ORDERBY_FIELD == 'product_price') echo "selected="selected""; ?>><?php echo $VM_LANG->_('PHPSHOP_PRODUCT_PRICE_TITLE') ?></option> <option value="product_sku" <?php if (@VM_BROWSE_ORDERBY_FIELD == 'product_sku') echo "selected="selected""; ?>><?php echo $VM_LANG->_('PHPSHOP_CART_SKU') ?></option> <option value="product_cdate" <?php if (@VM_BROWSE_ORDERBY_FIELD == 'product_cdate') echo "selected="selected""; ?>><?php echo $VM_LANG->_('PHPSHOP_LATEST') ?></option> </select> </td> <td><?php echo vmToolTip( $VM_LANG->_('VM_BROWSE_ORDERBY_DEFAULT_FIELD_LBL_TIP') ) ?></td> </tr> And add new option to input, type select: Код (CODE): <option value="product_list" <?php if (@VM_BROWSE_ORDERBY_FIELD == 'product_list') echo "selected="selected""; ?>><?php echo $VM_LANG->_('PHPSHOP_PRODUCT_ORDER_DEFAULT_MODIFIED') ?></option> Find: Код (CODE): <tr> <td class="labelcell"><?php echo $VM_LANG->_('VM_BROWSE_ORDERBY_FIELDS_LBL') ?></td> <td> <input name="conf_VM_BROWSE_ORDERBY_FIELDS[]" type="checkbox" value="product_name" <?php if (in_array( 'product_name', $VM_BROWSE_ORDERBY_FIELDS )) echo "checked="checked""; ?> id="conf_VM_BROWSE_ORDERBY_FIELDS1" /> <label for="conf_VM_BROWSE_ORDERBY_FIELDS1"><?php echo $VM_LANG->_('PHPSHOP_PRODUCT_NAME_TITLE') ?></label><br /> <input name="conf_VM_BROWSE_ORDERBY_FIELDS[]" type="checkbox" value="product_price" <?php if (in_array( 'product_price', $VM_BROWSE_ORDERBY_FIELDS )) echo "checked="checked""; ?> id="conf_VM_BROWSE_ORDERBY_FIELDS2" /> <label for="conf_VM_BROWSE_ORDERBY_FIELDS2"><?php echo $VM_LANG->_('PHPSHOP_PRODUCT_PRICE_TITLE') ?></label><br /> <input name="conf_VM_BROWSE_ORDERBY_FIELDS[]" type="checkbox" value="product_cdate" <?php if (in_array( 'product_cdate', $VM_BROWSE_ORDERBY_FIELDS )) echo "checked="checked""; ?> id="conf_VM_BROWSE_ORDERBY_FIELDS3" /> <label for="conf_VM_BROWSE_ORDERBY_FIELDS3"><?php echo $VM_LANG->_('PHPSHOP_LATEST') ?></label><br /> <input name="conf_VM_BROWSE_ORDERBY_FIELDS[]" type="checkbox" value="product_sku" <?php if (in_array( 'product_sku', $VM_BROWSE_ORDERBY_FIELDS )) echo "checked="checked""; ?> id="conf_VM_BROWSE_ORDERBY_FIELDS4" /> <label for="conf_VM_BROWSE_ORDERBY_FIELDS4"><?php echo $VM_LANG->_('PHPSHOP_CART_SKU') ?></label> </td> <td><?php echo vmToolTip( $VM_LANG->_('VM_BROWSE_ORDERBY_FIELDS_LBL_TIP') ) ?></td> </tr> And add new checkbox Код (CODE): <input name="conf_VM_BROWSE_ORDERBY_FIELDS[]" type="checkbox" value="product_list" <?php if (in_array( 'product_list', $VM_BROWSE_ORDERBY_FIELDS )) echo "checked="checked""; ?> id="conf_VM_BROWSE_ORDERBY_FIELDS5" /> <label for="conf_VM_BROWSE_ORDERBY_FIELDS5"><?php echo $VM_LANG->_('PHPSHOP_PRODUCT_ORDER_DEFAULT_MODIFIED') ?></label> File: administratorcomponentscom_virtuemarthtmlshop_browse_queries.php Find: Код (CODE): switch( $orderby ) { case 'product_name': $orderbyField = '`#__{vm}_product`.`product_name`'; break; case 'product_price': $orderbyField = '`#__{vm}_product_price`.`product_price`'; break; case 'product_sku': $orderbyField = '`#__{vm}_product`.`product_sku`'; break; case 'product_cdate': $orderbyField = '`#__{vm}_product`.`cdate`'; break; default: $orderbyField = '`#__{vm}_product`.`product_name`'; break; } And add new case: Код (CODE): case 'product_list': $orderbyField = '`#__{vm}_product`.`product_in_stock`'; $DescOrderBy = 'DESC'; break; } File: componentscom_virtuemartthemesdefaulttemplatesbrowseincludesbrowse_orderbyfields.tpl.php Find: Код (CODE): // SORT BY PRODUCT NAME if( in_array( 'product_name', $VM_BROWSE_ORDERBY_FIELDS)) { ?> <option value="product_name" <?php echo $orderby=="product_name" ? "selected="selected"" : "";?>> <?php echo $VM_LANG->_('PHPSHOP_PRODUCT_NAME_TITLE') ?></option> <?php } And add before it or wherever you want - it is up to you which option will be shown in which order "in sort by list" Код (CODE): // SORT BY MY OWN ORDER - MOJA ZMIANA if( in_array( 'product_list', $VM_BROWSE_ORDERBY_FIELDS)) { ?> <option value="product_list" <?php echo $orderby=="product_list" ? "selected="selected"" : "";?>> <?php echo $VM_LANG->_('PHPSHOP_PRODUCT_ORDER_DEFAULT_MODIFIED_LBL') ?></option> <?php } Last thing is to add to your language 2 new variables: File: administratorcomponentscom_virtuemartlanguagescommonyourlanguage.php Код (CODE): 'PHPSHOP_PRODUCT_ORDER_DEFAULT_MODIFIED' => 'Own sort order', 'PHPSHOP_PRODUCT_ORDER_DEFAULT_MODIFIED_LBL' => 'Default sorting', Of course you can name it as you want Правда, таким образом реализована только сортировка, без разделения: http://service-multi.ru/katalog/velokomponenti/tsepi
Всё работает , только вот есть несколько ошибок с ковычками, Лучше вставляйте эти файлы через ДРИМВИВЕР, сразу увидите эти 2 ошибки !!!!!!! Через БЛОКНОТ будет очень сложно. Плюс в файле administratorcomponentscom_virtuemarthtmlshop_brow se_queries.php нужно будет сначало удалить уже существующую строчку , после вот этого - case 'product_list': а то получится 2 переменные с одним именем Я разобрался, у меня стаж в создании сайтов 2 месяца
Я так понял это для первого виртуемарта. А для виртуемарта 2.0.20 решения проблемы с сортировкой по наличию товара нет?
почему? смысл работы такой же, только искать надо в других файлах, т.к. версия то всё же новая!!! в VM лучше разбирается shurikkan
Я знаю что копать нужно в файле /administrator/components/com_virtuemart/models/product.php вроде 414 строка, там где кейсы. Но что бы не меняла, ни чего не помогает. Сортировка в вирте как жила своей жизнью, так и продолжает.