Авг
31

Выводим товары из всех подкатегорий на страницу Virtuemart

Делаем ещё небольшой хак: выводим товары из подкатегорий на страницу категории. Это бывает необходимо очень часто, ведь подкатегории товаров – явление очень распространенное, а , почему-то, не хочет по умолчанию выводить товары в родительскую категорию из всех вложенных. Ну нехорошо это! И нужно лечить, чем мы сейчас и займемся. А то, что-от с этим виртом уже в депрессию некоторые впадают и задают вопрос Как избавится от депрессии?

Для лечения в файле /administrator/components/com_//shop.browse. нам нужно найти строку $dbp = new ps_DB;
А под ней добавить:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function getCatergoryChildsList( $clist, $catid ){
   $res_list = array( $catid );
   $search_childs = true;
   while( $search_childs ){
      $search_childs = false;
      foreach( $clist as $c_catid => $val ){
         if( in_array( $val['category_parent_id'], $res_list ) ){
            $res_list[] = $c_catid;
            unset( $clist[ $c_catid ] );
            $search_childs = true;
         }
      }
   }
   return $res_list;
}
$category_childs = '';
if ( $category_id && $ps_product_category->has_childs($category_id) ){
   $category_childs = getCatergoryChildsList( $ps_product_category->getCategoryTreeArray(), $category_id );
}

Далее давайте откроем /administrator/components/com_virtuemart/html/shop_browse_queries.php, где находим следующий код:

1
2
3
} elseif( empty( $keyword ) && empty( $manufacturer_id )) {
      $where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
   }

И меняем его на нашу небольшую модификацию.

1
2
3
4
5
6
 } elseif( empty( $keyword ) && empty( $manufacturer_id )) {
      if(!empty( $category_childs ))
         $where_clause[] = "`#__{vm}_product_category_xref`.`category_id` IN (".$category_id.",".implode(',',$category_childs).")";
      else
         $where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
   }

Теперь все товары авто рынок москва из подкатегорий появятся на странице главной категории. Ура!

9 коммент. к записи “Выводим товары из всех подкатегорий на страницу Virtuemart”

  • Алексей 18 октября 2011 - 15:49

    Прекрасная статья! Спасибо :)

    А вы не сталкивались с тем что бы вывести весь существующий товар в магазине на одну страницу? У меня просто не очень много наименований и хочется их все сразу показать пользователю. Не могу ничего найти по этому вопросу уже какой день…

  • K_E_V_in 19 октября 2011 - 14:58

    Честно говоря, не сталкивался. Но думаю, что это дело одного запроса к базе данных и всё

  • Выводим товары из всех подкатегорий на страницу Virtuemart | Заметки 25 ноября 2011 - 6:32

    [...] Честно стырено отсюда: webkev.com [...]

  • Orsey 3 февраля 2012 - 10:55

    а то что после этого хака у меня перестала работать сортировка это нормально? Или она не нужна при таком раскладе?

  • K_E_V_in 3 февраля 2012 - 11:00

    Они друг на друге не завязаны

  • Ohar 12 февраля 2012 - 21:20

    Скажите, а где искать те же настройки в Virtuemart 2.0?

    Там нет никаких /administrator/components/com_virtuemart/html/shop.browse.php

    Пробую самостоятельно редактировать /htdocs/components/com_virtuemart/views/virtuemart/tmpl/default.php

    Ничего хорошего не выходит — слишком плохо ещё знаю php и структуру virtuemart, путаюсь в классах и объектах.

  • Никита 23 февраля 2012 - 13:22

    Не работает :( Джумла полтора, виртумарт 1.1.9, просто белый экран, даже шаблон не грузится…

  • K_E_V_in 23 февраля 2012 - 13:35

    значит ошибка в коде. Проверяйте, включите вывод ошибок

  • Дмитрий 19 апреля 2012 - 13:33

    благодарю

Прокомментировать

Рубрики

Облако меток

В прямом эфире