БЛОГОДЖУМЛА - БЛОГ О ДЖУМЛА

Сортировка товара по категориям в поисковой выдаче Virtuemart

  • Категория: Virtuemart 1
  • Автор:
  • Просмотров: 8925
 

Небольшая модификация поисковой выдачи Virtuemart. Сортируем выдачу по категориям и выводим названия категории.

Необходимо изменить запросы. При наличии keyword - добавить сортировку по category_id. Открываем /administrator/components/com_virtuemart/html/shop_browse_queries.php s в самом начале в переменную $fieldnames добавляем наименование категории, например после

	`#__{vm}_category`.`category_id`,

добавляем

	`#__{vm}_category`.`category_name`,

 

Далее, после

	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;

	default:

	$orderbyField = '`#__{vm}_product`.`product_name`'; break;

	}

добавляем

	if (!empty($keyword)) $orderbyField =  '`#__{vm}_category`.`category_id`, '.$orderbyField ;

Закрываем, сохраняем. Запрос изменили, товары уже сортируются по категориям. Осталось сделать вывод наименования категории. Открываем /administrator/components/com_virtuemart/html/shop.browse.php и находим, например, 

	$products[$i]['product_url'] = $db_browse->f("product_url");

после этого добавляем

	if (!empty($keyword)) {
 $products[$i]['category_id'] = $db_browse->f("category_id");
 $products[$i]['category_name'] = shopMakeHtmlSafe( $db_browse->f("category_name") );
 }

Закрываем, сохраняем. Данные подготовили. Теперь нужно понять какой шаблон разметки мы используем. Это проще всего сделать открыв /components/com_virtuemart/themes/default/theme.config.php

В переменной productListStyle мы и увидим какой шаблон разметки используется. У меня это browse/includes/browse_notables.tpl.php Полный путь - /components/com_virtuemart/themes/default/templates/browse/includes/browse_notables.tpl.php Открываем этот файл и перед выводом товара 

	echo $this->fetch( 'browse/'.$templatefile .'.php' );

добавляем проверку на изменение категории и вывод названия категории.

	if ($category_id_current!=$product['category_id']) echo '<h1>'.$product['category_name'].'</h1>';

Ещё нам нужно учесть, что выдача поиска может быть многостраничной, и для правильной работы нам необходимо передавать значение  текущей категории $category_id_current между страницами. Проще всего это сделать через сессию $_SESSION. Перед

	echo $browsepage_footer; 

добавляем 

	$_SESSION['category_id_current'] =$category_id_current; 

Теперь нужно в начале инициализировать нашу переменную $category_id_current. Перед

	foreach( $products as $product ) {

пишем

	 $category_id_current=vmGet( $_SESSION , 'category_id_current', 0 ); 

Все готово.

Back to top