Форум русской поддержки Joomla!® CMS
08.12.2016, 00:14:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

[Решено] Вывод других товаров тойже категории в карточке товара

 (Прочитано 3203 раз)
0 Пользователей и 1 Гость смотрят эту тему.
x-render
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 25



« : 06.05.2013, 16:27:50 »

Здравствуйте. Подскажите пожалуйста как вывести в карточке товара другие товары (10 штук) из этой же категории. Так же как это делает "mod_virtuemart_product" , но он может показывать товары только из указанных категорий. Использование сопутствующих товаров не подходит. Заранее спасибо.
-----------------------------------------------------------------------------------------
Стояла задача:
В карточке товара вывести в виде карусели товары этой же категории.
Решение:
1). Создаем файл default_pohozie.php в директории /components/com_virtuemart/views/productdetails/tmpl/ следующего содержания:
Код:
<?php
defined ( '_JEXEC' ) or die ( 'Restricted access' );

$model = new VirtueMartModelProduct();
$calculator = calculationHelper::getInstance();

$currency = CurrencyDisplay::getInstance();

$this_prod=$this->product->virtuemart_product_id;
$prod_cat_id=$this->product->virtuemart_category_id;


$db = JFactory::getDBO();
$q  = 'SELECT * FROM `#__virtuemart_product_categories`';
$q .= ' WHERE `virtuemart_category_id` = "'.$prod_cat_id.'"';
$q .= ' ORDER BY RAND() LIMIT 50';
$db->setQuery($q);
$poh_prod_id = $db->loadObjectlist();
?>

<h4>Похожий товар:</h4>
  
<div class="b-carousel">
<div class="b-carousel-button-left"></div>
<div class="b-carousel-button-right"></div>
<div class="h-carousel-wrapper">
<div class="h-carousel-items">
     
<?
 $x=1;
 
foreach ($poh_prod_id as $prod_id){

if ($prod_id->virtuemart_product_id != $this_prod){

$poh_product = $model->getProductSingle($prod_id->virtuemart_product_id,false);
$price = $calculator -> getProductPrices($poh_product);

if ($poh_product->published ==1) {
$q  = 'SELECT * FROM `#__virtuemart_product_medias`';
$q .= ' WHERE `virtuemart_product_id` = "'.$prod_id->virtuemart_product_id.'" AND `ordering` = "1"';
$db->setQuery($q);
$imeg_id = $db->loadObjectlist();
foreach ($imeg_id as $imege_id){
$prod_img_id=$imege_id->virtuemart_media_id;
}

$q  = 'SELECT * FROM `#__virtuemart_medias`';
$q .= ' WHERE `virtuemart_media_id` = "'.$prod_img_id.'"';
$db->setQuery($q);
$pr_img = $db->loadObjectlist();
foreach ($pr_img as $prod_img){
$prod_image=$prod_img->file_url_thumb;
}

$link = 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $prod_id->virtuemart_product_id.'&virtuemart_category_id=' . $prod_cat_id;
?>
    <div class="b-carousel-block" style="overflow:hidden">
    
    <a href="<? echo $link; ?>"><img src="<? echo $prod_image; ?>" style="height:150px;" /></a>
    
    <div class="PricesalesPrice" style="margin:10px 0"><span class="PricesalesPrice" style="font-size:18pt; font-weight:normal"><?
if($price['salesPrice'] != 0) {
echo $currency->priceDisplay($price['salesPrice']);
} else {
echo $currency->priceDisplay($price['priceWithoutTax']);} ?>
            
     </span></div>
    
    <h2 class="vm_prod_title" style="font-size:14px; font-weight:normal"><a href="<? echo $link; ?>"><? echo $poh_product->product_name; ?></a></h2>
</div>
    <?
$x++;
}
}
} ?>
     </div>
</div>
</div>

Извините за качество кода, но причесывать его нет времени.

2). В файле /components/com_virtuemart/views/productdetails/tmpl/default.php в том месте где нам нужно вывести эти товары вставляем
Код:
<?php echo $this->loadTemplate('pohozie'); ?>

3). Если нужно сделать каруселью это все дело, то идем на http://www.yanajy.com/sdelay-sam/jQuery-carousel.html и берем от туда скрипт и СSS, подключаем их все должно работать.

В моем случае (так как товаров тысячи) я сделал вот тут  ' ORDER BY RAND() LIMIT 50' случайный выбор 50 ID товаров для вывода и то это много. Но вот тут if ($poh_product->published ==1) отсеялись товары которые не опубликованы.

Делалось на скорую руку главное чтоб работало, как будет время приведу это все в порядок.
Точно также можно сделать вывод "Сопутствующих товаров", не много только поменять переменные и убрать лишнее.
« Последнее редактирование: 08.05.2013, 16:21:45 от x-render » Записан
x-render
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 25



« Ответ #1 : 07.05.2013, 17:00:19 »

Решено своими силами. Сегодня - завтра выложу решение.
Записан
melkiialex
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 152


« Ответ #2 : 08.05.2013, 16:06:41 »

Гуд но только вставил так
Код:
<?php echo $this->loadTemplate('pohozie');?>
но вот вопрос как сделать, что бы было как и в сопутствующих товарах - 4 товара горизонтально, и максимум 2 ряда
то есть две строки по 4 товара?
Записан
x-render
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 25



« Ответ #3 : 08.05.2013, 16:36:20 »

Цитировать
Гуд но только вставил так
Код:
<?php echo $this->loadTemplate('pohozie');?>
Спасибо, поправил в описании.
Цитировать
но вот вопрос как сделать, что бы было как и в сопутствующих товарах - 4 товара горизонтально, и максимум 2 ряда
то есть две строки по 4 товара?
Если не использовать карусель, то нужно остановить цикл после 8-го товара. Блок куда выводятся товары сделать фиксированной ширины и высотой в 2 блока с 1 товаром, блок с 1 товаром 1/4 от ширины основного блока и float:left. Ну как-то так. =)
Записан
melkiialex
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 152


« Ответ #4 : 08.05.2013, 17:35:47 »

Спасибо, буду ломать голову как сделать каждому товару фиксированную ширину и что бы горизонтально располагалась 4 товара в 1 строке,
Записан
melkiialex
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 152


« Ответ #5 : 08.05.2013, 20:07:02 »

Как к твоему файлу подключить CSS с папки шаблона, как понимаю писать надо в файле default_pohozie.php - но что писать?
Записан
x-render
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 25



« Ответ #6 : 09.05.2013, 11:14:06 »

Можно подключить в основном файле шаблона где весь <head> описан или же в основном файле CSS прописать стили
Записан
melkiialex
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 152


« Ответ #7 : 09.05.2013, 11:52:49 »

а пример кода подключения CSS можно?
Записан
x-render
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 25



« Ответ #8 : 09.05.2013, 12:01:46 »

в каждом шаблоне по разному. у меня в папке шаблона в index.php
Код:
<link rel="stylesheet" href="<?php echo $document->baseurl; ?>/templates/system/css/general.css" />
Шаблон сделан в Artisteer 4. Посмотрите как основые CSS у вас подключаются.
Записан
melkiialex
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 152


« Ответ #9 : 09.05.2013, 15:28:05 »

Спасибо вывел 5 товаров в строку, но как сделать перенос на следующею строку не знаю, хотелось бы 4 строки по 5 товаров в строке, как настроить CSS  !
Записан
x-render
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 25



« Ответ #10 : 09.05.2013, 15:30:03 »

Дайте ссылку на страницу товара где вы это сделали.
Записан
artlux
Завсегдатай
*****

Репутация: +58/-0
Offline Offline

Пол: Мужской
Сообщений: 468



« Ответ #11 : 09.05.2013, 15:32:55 »

после каждых 5 товаров в строке должно выводится
Код:
<div style="clear:both;"></div>
ну а если вдруг высота карточки фиксированая - то можно зафиксировать блоки и float:left;
Код:
.myblock {display:block;height:300px;float:left;overflow:hidden;}


если вывод табличный - то тут только в коде подправляться надо
Записан
melkiialex
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 152


« Ответ #12 : 09.05.2013, 15:48:08 »

у меня на локалке
а как задать параметр после каждых 5 товаров в строке должно выводится <div style="clear:both;"></div>
как понимаю у вас в коде я поставил лимит
Код:
$q .= ' ORDER BY RAND() LIMIT 15';

Стили пока что сделал так

.carousel {}
.carousel-wrapper { }

Для одного товара
.carousel-block { width: 160px; margin-right: 8px; margin-left: 8px; display: table-cell; } - тут методом тыка display: table-cell - позволил вывести в строку, а не столбик товары, если убрать то они будут идти в столбик 15 штук.
Смотрю firebugом все товары идут в одну строку и она длинная, естественно на экране отображаются только те что влезают в поле сайта.

Все запутался совсем.
Записан
x-render
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 25



« Ответ #13 : 09.05.2013, 15:56:21 »

в цикле вместо $x++
Код:
if ($x==5) {
echo '<div style="clear:both;"></div>';
$x==0;}
а после $link = 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $prod_id->virtuemart_product_id.'&virtuemart_category_id=' . $prod_cat_id;

вставте
Код:
$x++;
.carousel-block { width: 160px; margin-right: 8px; margin-left: 8px; float:left; }

У вас с каруселью?
« Последнее редактирование: 09.05.2013, 16:00:28 от x-render » Записан
melkiialex
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 152


« Ответ #14 : 09.05.2013, 16:14:04 »

нет без карусели, так как не понял как ее подключать
Записан
x-render
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 25



« Ответ #15 : 09.05.2013, 16:16:11 »

тогда для .h-carousel-items{width: 100%;}
Записан
melkiialex
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 152


« Ответ #16 : 09.05.2013, 16:20:07 »

Блин в стало опять в колонку одну все 15 товаров.

А можно тут целый код страницы default_pohozie.php  Cheesy
Записан
artlux
Завсегдатай
*****

Репутация: +58/-0
Offline Offline

Пол: Мужской
Сообщений: 468



« Ответ #17 : 09.05.2013, 16:22:46 »

Потестил хак... Уходит около 40 запросов в БД (выводится 2 товара)...

Может стоит это дело переписать в модуль, и кешировать данные... ?! Если кому интерестно могу сделать модуль из того что есть...
Записан
melkiialex
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 152


« Ответ #18 : 09.05.2013, 16:25:40 »

Да было бы интересно, так как в ручную на VirtueMart 2 добавлять сопутствующие товары очень долго, если их еще больше 1000 например, так бы было классно когда автоматом выводятся снизу в несколько строк и колонок товары с категории товара который открыт.
Записан
artlux
Завсегдатай
*****

Репутация: +58/-0
Offline Offline

Пол: Мужской
Сообщений: 468



« Ответ #19 : 09.05.2013, 16:32:30 »

Цитировать
добавлять сопутствующие товары очень долго

так решение вроди не связано с ними... а просто выводит товары из категории...
В модуль впринципе можно добавить фильтры (по настраиваемым полям и т.п. опционально, если это комуто пригодится)...
Записан
x-render
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 25



« Ответ #20 : 09.05.2013, 16:33:05 »

Да я собирался все это в порядок привести как время появится и в модуль сделать, но пока нет возможности проекты горят сроки. Делалось на скорую руку и для отдельного магазина поэтому для всех остальных нужно допиливать. Выводится 2 товара наверное потому что попалось много неопубликованных =)
Записан
artlux
Завсегдатай
*****

Репутация: +58/-0
Offline Offline

Пол: Мужской
Сообщений: 468



« Ответ #21 : 09.05.2013, 16:36:54 »

Цитировать
Выводится 2 товара наверное потому что попалось много неопубликованных
да там их по 3 в категории и есть... я на демке смотрел... Глянул сколько это дело запросов в бд загонит с кешем включенным (вот на двух товарах гдето 40шт)...

Можно сделать хороший модуль впринципе, мысли что в нем нужно можно вылаживать... Мне сейчас заняться нечем могу состряпать...
Записан
x-render
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 25



« Ответ #22 : 09.05.2013, 16:47:06 »

Думаю много кому пригодится такая примочка, потому что очень часто просят вывести в карточку товара еще какие-нить товары, а средствами сопутствующих товаров это не реально сделать особенно если их тысячи. Да и не плохая перелинковка страниц и товаров получается. По сути там думаю пару настроек только надо, т.е. количество выводимого товара и использовать или нет слайдер, это если самый простой делать модуль.
Записан
artlux
Завсегдатай
*****

Репутация: +58/-0
Offline Offline

Пол: Мужской
Сообщений: 468



« Ответ #23 : 09.05.2013, 16:53:33 »

1. Количество выводимого товара возможность менять
2. Использовать все категории или только текущую
3. шаблон вывода слайдер, либо обычный
4. возможность задавать фильтры по настраиваемым полям (если полей текущего товара = с полем 1 выбираемых товаров) - тут сложнее реализация, но вполне возможно сделать...
5. Использование кеширования (кеш по ид товара, либо по ид категории(с категорией скорее не получится - много ньюансов))...

Если дополнений не будет - делаю в таком варианте...
Записан
x-render
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 25



« Ответ #24 : 09.05.2013, 17:01:30 »

ну может еще разброс по ценам добавить (выводить товары с ценой +/- столько-то от цены текущего)?
Было бы конечно круто еслиб такой модуль получился.  Smiley
Записан
melkiialex
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 152


« Ответ #25 : 10.05.2013, 00:28:56 »

И настройка вывода, случайно, по дате, а так же горизонтальный и вертикальный вывод и если горизонтальный то количество строк.
Вот только наверное будет один минус, от кода который выше, так как он выводит именно под открытым товаром товары с его категории, что очень удобно, чем то похоже на сопутствующие товары - и это очень важно
Записан
artlux
Завсегдатай
*****

Репутация: +58/-0
Offline Offline

Пол: Мужской
Сообщений: 468



« Ответ #26 : 10.05.2013, 00:52:30 »

готово http://joomlaforum.ru/index.php/topic,263102.0.html

по остальному буду дорабатывать... Пока так как есть...
« Последнее редактирование: 10.05.2013, 01:01:52 от artlux » Записан
x-render
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 25



« Ответ #27 : 11.05.2013, 00:40:44 »

 Cheesy Браво. Это конечно круто получилось. Полная замена стандартному "mod_virtuemart_product".
Записан
iliya_art
Осваиваюсь на форуме
***

Репутация: +7/-0
Offline Offline

Сообщений: 133



« Ответ #28 : 05.06.2015, 09:32:12 »

решил использовать на VirtueMart 3 , работает но не выводит изображения, подскажите пожалуйста как сделать правильную ссылку на изображения?
насколько я понял править надо тут:
Код:
<a href="<? echo $link; ?>"><img src="<? echo $prod_image; ?>" style="height:100px;" /></a>
Записан
iliya_art
Осваиваюсь на форуме
***

Репутация: +7/-0
Offline Offline

Сообщений: 133



« Ответ #29 : 11.06.2015, 09:06:00 »

Прошу помощи, слайдер работает, ссылки работают - но вот картинки не вытягивает. Может кто решал на VirtueMart 3.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet