У меня было подготовлено одно поле товар отсутствует (его я добавлял сам его нет в стандартном функционале vm как добавить дополнительное поле к товару читайте здесь) Назовем его “product_of”.
Задача: Сделать сортировку в списке товаров категории virtuemat-a таким образом что бы первыми выводились товары в наличии и по самой низкой цене. Соответственно товары которых нет выводятся последними.
Файлы:
administrator/components/com_virtuemart/html/shop.browse.php
administrator/components/com_virtuemart/html/shop_browse_queries.php
/administrator/components/com_virtuemart/virtuemart.cfg.php
/administrator/components/com_virtuemart/html/admin.show_cfg.php
components/com_virtuemart/themes/default/templates/browse/includes/browse_orderbyfields.tpl.php
administrator/components/com_virtuemart/languages/common/russian.php
В файле administrator/components/com_virtuemart/html/shop_browse_queries.php находим код
switch( $orderby ) { case 'product_list': $orderbyField = '`#__{vm}_product_category_xref`.`product_list`'; break; 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;
И после него вставляем
case 'product_of': $orderbyField = '`#__{vm}_product`.`product_of`, `product_price`'; break;
Далее добавляем возможность выбора из админки нашей сортировки
В файле /administrator/components/com_virtuemart/virtuemart.cfg.php
Находим код
/* OrderByFields */ global $VM_BROWSE_ORDERBY_FIELDS; $VM_BROWSE_ORDERBY_FIELDS = array( 'product_name','product_price','product_cdate');
И заменим его на
/* OrderByFields */ global $VM_BROWSE_ORDERBY_FIELDS; $VM_BROWSE_ORDERBY_FIELDS = array( 'product_name','product_price','product_cdate','product_of' );
и после
define('VM_REGISTRATION_TYPE', 'NO_REGISTRATION');
Добавим
define('VM_BROWSE_ORDERBY_FIELD', 'product_of');
В файле /administrator/components/com_virtuemart/html/admin.show_cfg.php находим код
<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>
После него добавляем
<input name="conf_VM_BROWSE_ORDERBY_FIELDS[]" type="checkbox" value="product_of" <?php if (in_array( 'product_of', $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_OF') ?></label>
Находим код
<option value="product_cdate" <?php if (@VM_BROWSE_ORDERBY_FIELD == 'product_cdate') echo "selected=\"selected\""; ?>><?php echo $VM_LANG->_('PHPSHOP_LATEST') ?></option>
После него добавляем
<option value="product_of" <?php if (@VM_BROWSE_ORDERBY_FIELD == 'product_of') echo "selected=\"selected\""; ?>><?php echo $VM_LANG->_('PHPSHOP_CART_OF') ?></option>
В файле components/com_virtuemart/themes/default/templates/browse/includes/browse_orderbyfields.tpl.php находим код
// SORT BY PRODUCT CREATION DATE if( in_array( 'product_cdate', $VM_BROWSE_ORDERBY_FIELDS)) { ?> <option value="product_cdate" <?php echo $orderby=="product_cdate" ? "selected=\"selected\"" : "";?>> <?php echo $VM_LANG->_('PHPSHOP_LATEST') ?></option> <?php } ?>
После него добавим
<?php if( in_array( 'product_of', $VM_BROWSE_ORDERBY_FIELDS)) { ?> <option value="product_of" <?php echo $orderby=="product_of" ? "selected=\"selected\"" : "";?>> <?php echo 'Товар отстутсвует' ?></option> <?php } ?>
В файле administrator/components/com_virtuemart/languages/common/russian.php добавить
'PHPSHOP_CART_OF' => 'Товар отсутствует',