Вверх

Блог
RSS лента

VirtueMart 3: Делаем вывод товаров из подкатегорий в родительскую категорию или вывод товаров вложенных категорий

Давненько я не сталкивался с этим компонентом магазина, уже и два релиза версии появились. Давно не занимался разработкой сайтов, но пришлось тряхнуть стариной и наваять магазинчик. Так вот уже на дворе третья версия сего магазина, а недоработки тащатся еще с первой версии виртуемарта. Как четыре года назад приходилось всё допиливать, так и сейчас.

Вот не понимаю, неужели так сложно сделать галочку в админке «выводить товары из подкатегорий»? Там то и коду кот наплакал, но нет же, разработчики эту штуку так и не добавили. Хотя может я просто этой функции не нашел в админской части новой версии магазина. Если такова возможность есть, то направьте меня на путь истинный в комментариях. Если же таковой нет, то тогда продолжайте читать дальше.
Собственно как я уже говорил кода для реализации вывода товаров из подкатегорий нужно не много по сравнению с первыми релизами virtuemart, там приходилось менять много файлов и писать много кода. Время идет строки уменьшаются, проблемы хоть и медленно, но решаются.

Перейдем же к решению. Для начала вам нужно найти category.php, который размещен по адресу: administrator/components/com_virtuemart/models/

Дальше открываем его для редактирования, например в блокноте. Ищем строку: class VirtueMartModelCategory extends VmModel {
Эта строка должна быть почти с самого верху файла. Вам нужно вставить в этот класс функцию, которая вернет нам массив подкатегорий. Копируем следующее и вставляем после «{»:

  1. function GetTreeCatArray(&$categories, $parent_id = 0) {
  2.         $db = JFactory::getDBO();
  3.         $query = 'SELECT `category_child_id` FROM `#__virtuemart_category_categories` WHERE `category_parent_id`="'.$parent_id.'"';
  4.         $db->setQuery($query);
  5.         $db->query();
  6.      
  7.         if (empty($categories) && ($parent_id != 0))
  8.           array_push($categories, $parent_id);
  9.  
  10.         $rows = $db->loadRowList();
  11.         if (empty($rows))    {
  12.             return;
  13.         } else {
  14.             foreach($rows as $row) {
  15.              array_push($categories, $row[0]);
  16.                 $this->GetTreeCatArray($categories, $row[0]);
  17.             }
  18.         }
  19.     }

Но это еще не всё, теперь Вам нужно вывести все продукты из подкатегории. Для этого в той папке, в которой вы уже искали файл категории (/administrator/components/com_virtuemart/models/) нужно найти другой файл products.php. Открыть его для редактирования и найти строку:

$where[] = ' `pc`.`virtuemart_category_id` = ' . $virtuemart_category_id;

Закомментируйте её или удалите. И добавьте вместо неё:

  1. $categories = array();
  2. VmModel::getModel('category')->GetTreeCatArray($categories, $virtuemart_category_id);
  3. $where[] = ' `pc`.`virtuemart_category_id` in (\'' . implode('\',\'',$categories).'\')';

Сохраните все изменения и перейдите в категорию, которая содержит категории, которые содержат продукты, и вы увидите, что товары таки выводятся из всех вложенных категорий.

Примечание. Так как у меня третья версия VirtueMart 3.0.9 то функцию нужно вставить в класс, но для VirtueMart 2 возможно будет достаточно вставить просто в файл, к сожалению, не могу проверить. Решение было сделано для второй версии, но благо подходит и для третьей.

Так как привычка оставлять на будущее себе заметки осталась, я решил создать эту статью в своем блоге. Да и может, кому то пригодится.

Ваша оценка: Пусто Средняя: 4.8 (29 votes)

Комментарии

VirtueMart 3: Делаем вывод товаров из подкатегорий

работает как должно работать. Это радует)
Вот только теперь карта сайта выдает товары из подкатегории в верхнюю категорию тоже.
Не смертельно, но неприятно

Отзыв

5

Отлично работает. Спасибо большое!

Я тебя люблю!

Это супер! То что надо :)

Если, у кого-то будет проблема с вёрсткой, то зайдите в настройки категории и выберите обычное для вашего магазина количество товаров в строке. ;)

http://prntscr.com/9l5qzq

спасибо

спасибо

Вывод товаров из-под категорий

5

Спасибо вам огромное!!! вы царь и бог!) мне так нужна была эта мелочь, нашел для 2.5 но там не подошло, спасибо!

Отправить комментарий

 
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]".
  • Image links with 'rel="lightbox"' in the <a> tag will appear in a Lightbox when clicked on.
  • Image links from G2 are formatted for use with Lightbox2
  • Image links with 'rel="lightshow"' in the <a> tag will appear in a Lightbox slideshow when clicked on.
  • Links to HTML content with 'rel="lightframe"' in the <a> tag will appear in a Lightbox when clicked on.
  • Links to video content with 'rel="lightvideo"' in the <a> tag will appear in a Lightbox when clicked on.
  • Links to inline or modal content with 'rel="lightmodal"' in the <a> tag will appear in a Lightbox when clicked on.

Подробнее о форматировании

CAPTCHA
Если вы человек, то тогда введите символы изображенные на картинке ниже
Image CAPTCHA
Введите символы, изображенные на картинке.
Главная | Портфолио | Услуги | Контакты | Блог