VirtueMart - сортировка товаров по цене

Воскресенье, 08 Апрель 2012

 

В электронном магазине по продаже мебели на Virtuemart 1.1.5, потребовалось сделать сортировку товаров по цене в списке категории. Сортировка должна была состоять из двух выпадающих списков, в первом нижний диапазон цен, а во втором верхний. А также кнопка "Показать" по нажатию на котороую должен выводится список товаров из выбранного диапазона цен.

 

На скриншите показана форма сортировки товаров по цене в Virtuemart:

 

Форма сортировки товаров по цене - VirtueMart

 

Для того чтобы данная форма появилась в списке товаров категории Virtuemart, нужно в файл:
"components/com_virtuemart/themes/default/templates/browse/includes/browse_header_category.tpl.php"

 

Добавить форму:

 

 
<?php
  $url = & JURI::getInstance();
?>
 
<form action="<?php echo $url->root(); ?>" method="get">
 
  <p>
    <strong>Цена: </strong>
    <br/>
    <label for="min">От</label>
    <select id="mim" type="text" name="min">
      <option <?php if(empty($_GET["min"])): ?> selected="selected" <?php endif; ?> value="">-</option>
 
      <option <?php if($_GET["min"]==3000): ?> selected="selected" <?php endif; ?> value="3000">3000</option>
      <option <?php if($_GET["min"]==5000): ?> selected="selected" <?php endif; ?> value="5000">5000</option>
      <option <?php if($_GET["min"]==10000): ?> selected="selected" <?php endif; ?> value="10000">10000</option>
      <option <?php if($_GET["min"]==15000): ?> selected="selected" <?php endif; ?> value="15000">15000</option>
      <option <?php if($_GET["min"]==20000): ?> selected="selected" <?php endif; ?> value="20000">20000</option>
      <option <?php if($_GET["min"]==25000): ?> selected="selected" <?php endif; ?> value="25000">25000</option>
      <option <?php if($_GET["min"]==30000): ?> selected="selected" <?php endif; ?> value="30000">30000</option>
      <option <?php if($_GET["min"]==50000): ?> selected="selected" <?php endif; ?> value="50000">50000</option>
      <option <?php if($_GET["min"]==100000): ?> selected="selected" <?php endif; ?> value="100000">100000</option>
    </select>
    <label for="max">До</label>
    <select id="max" type="text" name="max">
      <option <?php if(empty($_GET["max"])): ?> selected="selected" <?php endif; ?> value="">-</option>
 
      <option <?php if($_GET["max"]==5000): ?> selected="selected" <?php endif; ?> value="5000">5000</option>
      <option <?php if($_GET["max"]==10000): ?> selected="selected" <?php endif; ?> value="10000">10000</option>
      <option <?php if($_GET["max"]==15000): ?> selected="selected" <?php endif; ?> value="15000">15000</option>
      <option <?php if($_GET["max"]==20000): ?> selected="selected" <?php endif; ?> value="20000">20000</option>
      <option <?php if($_GET["max"]==25000): ?> selected="selected" <?php endif; ?> value="25000">25000</option>
      <option <?php if($_GET["max"]==30000): ?> selected="selected" <?php endif; ?> value="30000">30000</option>
      <option <?php if($_GET["max"]==50000): ?> selected="selected" <?php endif; ?> value="50000">50000</option>
      <option <?php if($_GET["max"]==100000): ?> selected="selected" <?php endif; ?> value="100000">100000</option>
      <option <?php if($_GET["max"]==200000): ?> selected="selected" <?php endif; ?> value="200000">200000</option>
    </select>
    <input type="submit" value="Показать"/>
  </p>
 
    <input type="hidden" name="Itemid" value="<?php echo $_GET["Itemid"]; ?>" />
    <input type="hidden" name="option" value="com_virtuemart" />
    <input type="hidden" name="page" value="shop.browse" />
    <input type="hidden" name="category_id" value="<?php echo $_GET["category_id"]; ?>" />
  <input type="hidden" name="limit" value="<?php echo $_GET["limit"]; ?>" />
  <input type="hidden" name="limitstart" value="<?php echo $_GET["limitstart"]; ?>" />
 
</form>
 

 

Затем в файл который формирует SQL запросы для выборки списка товаров в категории Virtuemart -
"administrator/components/com_virtuemart/html/shop_browse_queries.php" в строку 186, добавляем условие выборки с оператором диапазона:

 

 
<?php
//Filter Products by price
if ( isset($_GET["min"]) && isset($_GET["max"]) ){
  $min = (int)$_GET["min"];
  $max = (int)$_GET["max"];
 
  if($min=="" && $max!=""){
    $where_clause[] = "(`#__{vm}_product_price`.`product_price` < ".$max.")";
  }
  if($min!="" && $max==""){
    $where_clause[] = "(`#__{vm}_product_price`.`product_price` > ".$min.")"; 
  }
  if($min!="" && $max!=""){
    $where_clause[] = "(`#__{vm}_product_price`.`product_price` BETWEEN ".$min." AND ".$max.")"; 
  }
}
?>
 

 

Далее очень важный момент, т.к в списке категории Virtuemart выводится постраничная навигация, то при переходе на другие страницы, по ее ссылкам, наши переменные $_GET["min"] и $_GET["max"], слетят.

 

И соответственно сортировка товаров, будет снова без учета диапазона цен. Чтобы решить этот вопрос, следует добавить данные переменные к URL ссылкам в постраничной навигации. Для этого нам нужно найти файл где формируются эти ссылки постраничной навигации, это файл - "administrator/components/com_virtuemart/classes/pageNavigation.class.php"

 

Везде к ссылкам добавляем нужные нам переменные:

 

 
<?php
'&min='.$_GET["min"].'&max='.$_GET["max"].'
?>
 

 

PS. Читайте последние записи RSS Подписка на RSS

Метки:

Комментарии 

 
anonim Воскресенье, 27 Октябрь 2013

Здравствуйте ! Подскажите Пожалуйста. Как сделать для VirtueMart 2.0.24 - сортировка товаров по цене .
Заранее спасибо за ответ.
С уважением User1.

 

 
 
anonim Воскресенье, 20 Июль 2014

Этот код будет работать в Virtuemart 2?

 

 
 
anonim Воскресенье, 07 Июнь 2015

Добрый день. После того, как вставляю код в файл administrator/components/com_virtuemart/html/shop_browse_que ries.php перестают загружаться страницы с товаром, появляется белый лист. В чем может быть ошибка?

 

 
 
anonim Вторник, 09 Июнь 2015

Yanka, попробуйте включить вывод ошибок в настройках Joomla

 

 

Добавить комментарий