Эта статья является логическим продолжением статьи про вывод дочерних в карточке товара.
Она будет полезна если дочерние товары не показываются в категориях, но нужно показать, например, все доступные расцветки товара.
Для решения этой задачи в шаблоне вывода товаров /components/com_virtuemart/sublayouts/products.php нужно просто подключить файл childproduct_category.php.
1 |
<?php echo shopFunctionsF::renderVmSubLayout('childproduct_category',array('product'=>$product)); ?> |
Сам файл childproduct_category.php нужно скопировать в папку /components/com_virtuemart/sublayouts/.
По умолчанию кроме картинки будет выводиться и дополнительная информация о товаре. Чтобы ее убрать удалите childproduct_category.php
1 2 3 4 5 6 7 8 9 10 11 |
<div class="childproduct-category-name"> <?php $url = JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $product->virtuemart_product_id . '&virtuemart_category_id=' .$product->virtuemart_category_id); ?> <a href="<?php echo $url ?>"><?php echo $product->product_name ?></a> </div> <div class="childproduct-category-price"> <?php echo shopFunctionsF::renderVmSubLayout('prices',array('product'=>$product,'currency'=>$currency)); ?> </div> <div class="childproduct-category-addtocart"> <?php echo shopFunctionsF::renderVmSubLayout('addtocart',array('product'=>$product)); ?> </div> |
Для стилизации добавьте в css файл шаблона
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
.childproduct-category-wrap{ display: -webkit-box; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-bottom: 20px; } .childproduct-category{ -webkit-box-flex: 0; -ms-flex: 0 0 25%; flex: 0 0 25%; max-width: 25%; padding: 5px; } .childproduct-category.active { border: 1px solid #ffb236; } .childproduct-category .childproduct-category-image img{ position: relative; } |
На сайте все будет выглядеть примерно так
Если в категории будут выводиться дочерние товары, то у них также будет показан родитель и остальные дочерние.
artemiy
Спасибо за статью.
На ее основании сделал вывод всех размеров обуви в обувной категории магазина.
Но есть дополнительный вопрос, который меня мучает:
Использую Custom Filters в паре Stockable Custom Fields. Вывод списка размеров это еще пол беды.
Реально ли сделать подобное:
Отфильтровать все модели у которых в наличии есть, к примеру, 40 размер и чтобы ссылка на карточку товара вела на 40 размер всех отфильтрованных товаров?
У ребят из Розетки такое вот уже давно реализовано (см. скриншот по ссылке)
https://prnt.sc/mzdwws
admin
Если дочерние выводятся в категории, то после фильтрации по идеи все будет работать также как на скрине.
artemiy
Нет, только родительские.
admin
Тогда сложнее. В настройках фильтра есть опция показа дочерних товаров?
artemiy
Да, такое имеется. Только что активировал. Было Parent Product
См. скрин
http://prntscr.com/mznwzq
admin
Попробуйте выбрать All и потестировать.
artemiy
Протестировал, есть пара вариантов поведения, но ни один не подходит.
Итак: при выборе All подтягиваются все кастомфилды, которые свойственны товарам этой категории. Но хотелось бы их контролировать. Есть кастомфилды которые хотело бы показывать в категории.
Самый близкий вариант по результатам это Child Product
но есть одно НО. Если выбираешь размер, то получаешь в результате все дочерние товары, которые соответствуют этому размеру. Что в принципе правильно. Но сюрпризы начинаются когда фильтруешь по производителю, предварительно не тронув размер.
Выбрав к примеру Adidas, получаем список всех дочерних товаров. А в каждом материнском у меня по 20-25 размеров. Умножаем это на количество материнских и получаем "ужас, летящий на крыльях ночи". Вроде бы покупатель видел 10-15 моделей кроссовок, а отфильтровав по производителю, получает в результате 250+ товаров.
Такое поведение вроде и логично, но совершенно никого не устраивает.
Опять же, смотрю на Розетку, у них такая логика: если отфильтровал по производителю, то получается один рандомный товар одной модели.
Как можно такое реализовать? Смотрю в код Custom Filters и глаза слезами наливаются. Моих знаний РНР явно не хватает. Единственное что надо нарыть где формируется запрос в базу и его "погипнотизировать" взглядом.
Пока есть мысль что запрос формируется тут
components\com_customfilters\models\products.php, но как раз упираюсь в лимит своих познаний.
admin
Запрос в базу для вывода товаров в категории (без фильтрации и с фильтрацией) формируется в /administrator/components/com_virtuemart/models/product.php в методе sortSearchListQuery.
Александр
Пример категории товара https://камешки-колечки.рф/garnitur/garnitury-a052. Вот если зайти в категории и выбрать размер кольца, то автоматом перекидывает в карточку товара с выбранным размером кольца. И вот уже в карточке нужно добавлять в корзину. Хочу сделать, чтобы добавить в корзину появлялась в самой категории и при этом можно было выбрать размер кольца, то есть отметили нужный размер и не перекидывало в карточку товара, а появлялась просто кнопка "Добавить в корзину" на странице категории товара. То есть не нужен вывод дополнительных фотографий или описаний в категории, нужно, чтобы были перечислены только размеры из поля мультивариант и покупатель мог выбирать размер не заходя в карточку товара.
admin
Данный функционал должен работать. Пример на официальном демо-сайте.
Попробуйте отключить модуль фильтра, возможно, проблема в нем.
OutLaw123
А нельзя вывести только определенные дочерки, например выводить только одну вариацию в каждом цвете, просто когда в каждом цвете много дочерних размеров много одинаковых миниатюр...И родителя чтобы не выводило.
Пробовал вывести именно мультивариант как на офф сайте, но ajax плохо отрабатывает и выглядит не так красиво как миниатюра с фото дочернего товара 🙁
Ждем модуль для вывода мультиварианта в категории 🙂 было бы супер! Чтобы примерно как на wildberries работало, это лучший пример витрины для товаров с одеждой.
admin
Код из статьи позволяет выводить только дочерние товары у родителя. На вывод товаров в категории он никак не влияет.
Сделать, как на wildberries вряд ли получится, лучше обратитесь для этой задачи на фриланс.
Виталий
Добрый день! Решение отличное.
Есть вопрос:
при выборе дочерки, происходит переход в карточку товара.
А можно сделать так, чтобы происходила замена в товара внутри категории, смена товара, а не переход?
admin
Здравствуйте!
К сожалению, готового решения не смогу предложить.
Можно либо по аналогии с выводом мультиварианта дописывать скрипты, либо править стандартный вывод мультиварианта.
Возможно, подойдет вариант без вывода картинки.
Ирина
Добрый день
Для virtuemart 2 есть такое что то? очень надо, так как товаров более двух с половиной тысяч и конечно уже стало их долго выбирать, что не полезно для продаж, но просто сделать выбор дочерних без вывода как у вас под картинкой мелких картинок расцветок, будет просто не понятно и естественно не лучше чем сейчас, на тройку перейти не могу - рушится весь сайт, все шаблоны, плагины, все геолакации... всё ... всё шо нажито непосилным трудом 🙂
а между тем в категории уже порой по 49 страниц, это точно не хорошо
admin
Здравствуйте!
Попробуйте этот же код для vm2.
Думаю, что должно сработать.
Если не получится, то пишите на admin@virtuemart.su, что-нибудь придумаем.
Ирина
просто я вчера попыталась это сделать, но! такого пути нет и такого файла нет, видимо оно навзывается иначе, а я не знаю как
admin
Пришлите доступ к админке и ftp на admin@virtuemart.su, что-нибудь придумаем.
Роман
Добрый день.
Вы не подскажете, можно ли на VM3 сделать пунктом меню выключенную категорию?
Например я не хочу, чтобы какая-то категория выводилась в модуле вывода меню virtuemart, но хочу сделать на неё ссылку в другом меню.
Раньше (Joomla 2.5, VM2) просто выключал категорию, потом в менеджере меню создавал пункт, выбирал категорию и всё работало. Сейчас получаю ошибку TOO_MANY_REDIRECTS =\
admin
Здравствуйте!
Стандартными средствами не получится сделать.
Можно немного модифицировать модуль вывода категорий, чтобы он не показывал нужный категорию или просто скрыть ее с помощью css.
Уточните в каком модуле категории выводятся на сайте.
kirill.psl
Есть мультивариант, с дочерними но айди нужно в единичном случае вывести не по порядку, а скажем так 1,3,2,4, в категории показываются они по порядку 1,2,3,4, и получается не правильная картина... можно ли как-то сделать так чтоб выводились в том порядке в котором указано в настраиваемом поле (там есть возможность изменить порядок кнопочкой)
admin
В скрипте childproduct_category.php нет порядка прикрепления, поэтому пересортировать не получится.
kirill.psl
возникла проблема, если у товара нет дочерних, цена в категории вообще не показывается... как сделать так чтоб если дочерних нет, тогда показывалась цена?
само условие проверки есть или нет дочерние товары не знаю как написать...
вывод цены по умолчанию который был в products.php я удалил :
сейчас у меня так :
https://yadi.sk/i/JJbXvTmqBydEhw
а если у товара нет дочерних, то не соответственно цена не показывается, как то можно сделать проверку о том что есть дочерний и если нет то показывать цену одного товара?
admin
Для проверки наличия дочерних попробуйте этот код
kirill.psl
думаю правильнее будет прописать это условие в childproduct_category.php в конце, но моих знаний php не хватает (( (
как правильнее написать это ? после предпоследнего } пишу :
но в таком случае не показывается цена, если написать !empty то будет показываться только в товарах где есть дочерний товар... что не так? 🙁
admin
Попробуйте этот код
kirill.psl
в таком случае цена появляется на всех товарах кроме того у которого нет дочерних товаров...
если убрать написать "if (count..." цена не на одном не показывается...
kirill.psl
может можно как-то поправить отбор в childproduct_category.php так чтоб в товарах где нет дочерних тоже выводить список (из одного товара)?
kirill.psl
победил, вот так :
скорее всего это костыль, но работает)
admin
Спасибо, что поделились.
il_elmira
добрый день! плагин работает, но глючит вывод фото товара в категории. вместо большой картинки берет маленькую с изображения дочернего товара. что можно сделать? скришоты
https://yadi.sk/i/jshcIO4xFSSs9w
https://yadi.sk/i/TB-tU6udz70MNA
admin
Здравствуйте!
Проблема возникает при выводе дочерних товаров или при использовании плагина Vm Zoomer?
il_elmira
именно дочерних, Vm Zoomer работает отлично
admin
Возможно, проблема в стилях, пришлите ссылку на страницу с проблемой.
il_elmira
https://beauty-comfort.com/termobele-zhenskoe
не сразу не правильно выводить, нужно например, открыть товар и вернуться в категорию
admin
Не понял, что именно нужно сделать, поясните подробнее.
il_elmira
добрый день!плагин работает, но глючит вывод фото товара в категории. вместо большой картинки берет маленькую с изображения дочернего товара. что можно сделать?
https://beauty-comfort.com/termobele-zhenskoe
1. открываете страницу категории
2. открываете какой либо товар
3. возвращаетесь в категорию, нажав кнопку вернутся в верхнем левом углу браузера
скришоты
https://yadi.sk/i/jshcIO4xFSSs9w
https://yadi.sk/i/TB-tU6udz70MNA
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. возвращаетесь в категорию, нажав кнопку вернутся в верхнем левом углу браузера