Вывод дочерних товаров в категории virtuemart

Опубликовано: 14 февраля, 2019
Обновлено: 5 февраля, 2023
Категория: Настройка VirtueMart

Эта статья является логическим продолжением статьи про вывод дочерних в карточке товара.

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

Для решения этой задачи в шаблоне вывода товаров /components/com_virtuemart/sublayouts/products.php нужно просто подключить файл childproduct_category.php.

Скачать

Сам файл childproduct_category.php нужно скопировать в папку /components/com_virtuemart/sublayouts/.

По умолчанию кроме картинки будет выводиться и дополнительная информация о товаре. Чтобы ее убрать удалите childproduct_category.php

Для стилизации добавьте в css файл шаблона

На сайте все будет выглядеть примерно так

Если в категории будут выводиться дочерние товары, то у них также будет показан родитель и остальные дочерние.

40 комментариев

    artemiy

    Спасибо за статью.
    На ее основании сделал вывод всех размеров обуви в обувной категории магазина.
    Но есть дополнительный вопрос, который меня мучает:
    Использую Custom Filters в паре Stockable Custom Fields. Вывод списка размеров это еще пол беды.

    Реально ли сделать подобное:
    Отфильтровать все модели у которых в наличии есть, к примеру, 40 размер и чтобы ссылка на карточку товара вела на 40 размер всех отфильтрованных товаров?

    У ребят из Розетки такое вот уже давно реализовано (см. скриншот по ссылке)
    https://prnt.sc/mzdwws

      admin

      admin

      Если дочерние выводятся в категории, то после фильтрации по идеи все будет работать также как на скрине.

        artemiy

        Нет, только родительские.

          admin

          admin

          Тогда сложнее. В настройках фильтра есть опция показа дочерних товаров?

            artemiy

            Да, такое имеется. Только что активировал. Было Parent Product
            См. скрин

            http://prntscr.com/mznwzq

            admin

            admin

            Попробуйте выбрать All и потестировать.

    artemiy

    Протестировал, есть пара вариантов поведения, но ни один не подходит.

    Итак: при выборе All подтягиваются все кастомфилды, которые свойственны товарам этой категории. Но хотелось бы их контролировать. Есть кастомфилды которые хотело бы показывать в категории.

    Самый близкий вариант по результатам это Child Product
    но есть одно НО. Если выбираешь размер, то получаешь в результате все дочерние товары, которые соответствуют этому размеру. Что в принципе правильно. Но сюрпризы начинаются когда фильтруешь по производителю, предварительно не тронув размер.

    Выбрав к примеру Adidas, получаем список всех дочерних товаров. А в каждом материнском у меня по 20-25 размеров. Умножаем это на количество материнских и получаем "ужас, летящий на крыльях ночи". Вроде бы покупатель видел 10-15 моделей кроссовок, а отфильтровав по производителю, получает в результате 250+ товаров.
    Такое поведение вроде и логично, но совершенно никого не устраивает.

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

    Как можно такое реализовать? Смотрю в код Custom Filters и глаза слезами наливаются. Моих знаний РНР явно не хватает. Единственное что надо нарыть где формируется запрос в базу и его "погипнотизировать" взглядом.

    Пока есть мысль что запрос формируется тут
    components\com_customfilters\models\products.php, но как раз упираюсь в лимит своих познаний.

      admin

      admin

      Запрос в базу для вывода товаров в категории (без фильтрации и с фильтрацией) формируется в /administrator/components/com_virtuemart/models/product.php в методе sortSearchListQuery.

    Александр

    Пример категории товара https://камешки-колечки.рф/garnitur/garnitury-a052. Вот если зайти в категории и выбрать размер кольца, то автоматом перекидывает в карточку товара с выбранным размером кольца. И вот уже в карточке нужно добавлять в корзину. Хочу сделать, чтобы добавить в корзину появлялась в самой категории и при этом можно было выбрать размер кольца, то есть отметили нужный размер и не перекидывало в карточку товара, а появлялась просто кнопка "Добавить в корзину" на странице категории товара. То есть не нужен вывод дополнительных фотографий или описаний в категории, нужно, чтобы были перечислены только размеры из поля мультивариант и покупатель мог выбирать размер не заходя в карточку товара.

      admin

      admin

      Данный функционал должен работать. Пример на официальном демо-сайте.
      Попробуйте отключить модуль фильтра, возможно, проблема в нем.

        OutLaw123

        А нельзя вывести только определенные дочерки, например выводить только одну вариацию в каждом цвете, просто когда в каждом цвете много дочерних размеров много одинаковых миниатюр...И родителя чтобы не выводило.
        Пробовал вывести именно мультивариант как на офф сайте, но ajax плохо отрабатывает и выглядит не так красиво как миниатюра с фото дочернего товара 🙁
        Ждем модуль для вывода мультиварианта в категории 🙂 было бы супер! Чтобы примерно как на wildberries работало, это лучший пример витрины для товаров с одеждой.

          admin

          admin

          Код из статьи позволяет выводить только дочерние товары у родителя. На вывод товаров в категории он никак не влияет.
          Сделать, как на wildberries вряд ли получится, лучше обратитесь для этой задачи на фриланс.

    Виталий

    Добрый день! Решение отличное.
    Есть вопрос:
    при выборе дочерки, происходит переход в карточку товара.
    А можно сделать так, чтобы происходила замена в товара внутри категории, смена товара, а не переход?

      admin

      admin

      Здравствуйте!

      К сожалению, готового решения не смогу предложить.
      Можно либо по аналогии с выводом мультиварианта дописывать скрипты, либо править стандартный вывод мультиварианта.
      Возможно, подойдет вариант без вывода картинки.

    Ирина

    Добрый день
    Для virtuemart 2 есть такое что то? очень надо, так как товаров более двух с половиной тысяч и конечно уже стало их долго выбирать, что не полезно для продаж, но просто сделать выбор дочерних без вывода как у вас под картинкой мелких картинок расцветок, будет просто не понятно и естественно не лучше чем сейчас, на тройку перейти не могу - рушится весь сайт, все шаблоны, плагины, все геолакации... всё ... всё шо нажито непосилным трудом 🙂
    а между тем в категории уже порой по 49 страниц, это точно не хорошо

      admin

      admin

      Здравствуйте!

      Попробуйте этот же код для vm2.
      Думаю, что должно сработать.
      Если не получится, то пишите на admin@virtuemart.su, что-нибудь придумаем.

        Ирина

        просто я вчера попыталась это сделать, но! такого пути нет и такого файла нет, видимо оно навзывается иначе, а я не знаю как

          admin

          admin

          Пришлите доступ к админке и ftp на admin@virtuemart.su, что-нибудь придумаем.

    Роман

    Добрый день.

    Вы не подскажете, можно ли на VM3 сделать пунктом меню выключенную категорию?

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

    Раньше (Joomla 2.5, VM2) просто выключал категорию, потом в менеджере меню создавал пункт, выбирал категорию и всё работало. Сейчас получаю ошибку TOO_MANY_REDIRECTS =\

      admin

      admin

      Здравствуйте!
      Стандартными средствами не получится сделать.
      Можно немного модифицировать модуль вывода категорий, чтобы он не показывал нужный категорию или просто скрыть ее с помощью css.
      Уточните в каком модуле категории выводятся на сайте.

    kirill.psl

    Есть мультивариант, с дочерними но айди нужно в единичном случае вывести не по порядку, а скажем так 1,3,2,4, в категории показываются они по порядку 1,2,3,4, и получается не правильная картина... можно ли как-то сделать так чтоб выводились в том порядке в котором указано в настраиваемом поле (там есть возможность изменить порядок кнопочкой)

      admin

      admin

      В скрипте childproduct_category.php нет порядка прикрепления, поэтому пересортировать не получится.

    kirill.psl

    возникла проблема, если у товара нет дочерних, цена в категории вообще не показывается... как сделать так чтоб если дочерних нет, тогда показывалась цена?

    само условие проверки есть или нет дочерние товары не знаю как написать...
    вывод цены по умолчанию который был в products.php я удалил :

    сейчас у меня так :
    https://yadi.sk/i/JJbXvTmqBydEhw

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

      admin

      admin

      Для проверки наличия дочерних попробуйте этот код

    kirill.psl

    думаю правильнее будет прописать это условие в childproduct_category.php в конце, но моих знаний php не хватает (( (

    как правильнее написать это ? после предпоследнего } пишу :

    но в таком случае не показывается цена, если написать !empty то будет показываться только в товарах где есть дочерний товар... что не так? 🙁

      admin

      admin

      Попробуйте этот код

        kirill.psl

        в таком случае цена появляется на всех товарах кроме того у которого нет дочерних товаров...

        если убрать написать "if (count..." цена не на одном не показывается...

          kirill.psl

          может можно как-то поправить отбор в childproduct_category.php так чтоб в товарах где нет дочерних тоже выводить список (из одного товара)?

            kirill.psl

            победил, вот так :

            скорее всего это костыль, но работает)

            admin

            admin

            Спасибо, что поделились.

    il_elmira

    добрый день! плагин работает, но глючит вывод фото товара в категории. вместо большой картинки берет маленькую с изображения дочернего товара. что можно сделать? скришоты
    https://yadi.sk/i/jshcIO4xFSSs9w
    https://yadi.sk/i/TB-tU6udz70MNA

      admin

      admin

      Здравствуйте!

      Проблема возникает при выводе дочерних товаров или при использовании плагина Vm Zoomer?

        il_elmira

        именно дочерних, Vm Zoomer работает отлично

          admin

          admin

          Возможно, проблема в стилях, пришлите ссылку на страницу с проблемой.

            il_elmira

            https://beauty-comfort.com/termobele-zhenskoe
            не сразу не правильно выводить, нужно например, открыть товар и вернуться в категорию

            admin

            admin

            Не понял, что именно нужно сделать, поясните подробнее.

            il_elmira

            добрый день!плагин работает, но глючит вывод фото товара в категории. вместо большой картинки берет маленькую с изображения дочернего товара. что можно сделать?
            https://beauty-comfort.com/termobele-zhenskoe
            1. открываете страницу категории
            2. открываете какой либо товар
            3. возвращаетесь в категорию, нажав кнопку вернутся в верхнем левом углу браузера
            скришоты
            https://yadi.sk/i/jshcIO4xFSSs9w
            https://yadi.sk/i/TB-tU6udz70MNA

            admin

            admin

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

            il_elmira

            $products ) {

            $col = 1;
            $nb = 1;
            $row = 1;

            if($dynamic){
            $rowsHeight[$row]['product_s_desc'] = 1;
            $rowsHeight[$row]['price'] = 1;
            $rowsHeight[$row]['customfields'] = 1;
            $col = 2;
            $nb = 2;
            } else {
            $rowsHeight = shopFunctionsF::calculateProductRowsHeights($products,$currency,$products_per_row);

            if( (!empty($type) and count($products)>0) or (count($viewData['products'])>1 and count($products)>0)){
            $productTitle = vmText::_('COM_VIRTUEMART_'.strtoupper($type).'_PRODUCT'); ?>

            link)) {
            vmdebug('$product is not object or link empty',$product);
            continue;
            }
            // Show the horizontal seperator
            if ($col == 1 && $nb > $products_per_row) { ?>

            <li class="item product col-md-4 col-sm-6 col-xs-12 col-lg-">

            <a title="product_name ?>" href="link.$ItemidStr; ?>">
            images[0]->displayMediaThumb('class="browseProductImage"', false);
            ?>

            prices['basePriceVariant'] - (int)$product->prices['salesPrice']))/$product->prices['basePriceVariant'])*100);

            if($percent) { ?>
            %

            $product)); ?>

            $showRating, 'product'=>$product)); ?>

            mf_name ?>

            product_sku ?>

            virtuemart_product_id ?>

            link, JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS'), array('title' => $product->product_name, 'class' => 'product-details'));

            echo JHTML::link ($product->link, 'Подробнее..', array('title' => $product->product_name, 'class' => 'read_more product-details font-special'));
            ?>

            link.$ItemidStr, $product->product_name); ?>

            <div class="item-price vm3pr-"> $product,'currency'=>$currency)); ?>

            product_s_desc)) {
            echo shopFunctionsF::limitStringByWord ($product->product_s_desc, 300, ' ...') ?>

            <div class="group-addtocart vm3pr-"> $product,'rowHeights'=>$rowsHeight[$row], 'position' => array('ontop', 'addtocart'))); ?>

            $BrowseTotalProducts) {
            if ($nb>$BrowseTotalProducts) {
            ?>

            0){
            // Do we need a final closing row tag?
            //if ($col != 1) {
            ?>

            //

            <?php
            // }
            }
            }

    il_elmira

    1. открываете страницу категории
    2. открываете какой либо товар
    3. возвращаетесь в категорию, нажав кнопку вернутся в верхнем левом углу браузера

Комментарии закрыты

С 15-18 июня admin в отпуске.

Ответы на все вопросы и ссылки на товары будут присланы 19 июня.

Спасибо за понимание и хороших выходных.

×