Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сопутствующие товары в Virtuemart

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
gurvinek
Отправлено: 05 Апреля, 2015 - 01:10:23
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Прошу помощи в выводе сопутствующих товаров в карточке товара в Virtuemart 2. Есть код:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.  
  4.         $category_id = $this->product->categories[0];
  5.  
  6.        
  7.         if ($filter_category ) $filter_category = TRUE;
  8.         $productModel = VmModel::getModel('Product');
  9.         $products = $productModel->getProductListing('', 3, $category_id);
  10.         $productModel->addImages($products);
  11.         $currency = CurrencyDisplay::getInstance( );
  12.        
  13.        
  14.         ?>
  15.         <div id="catprod" class="browse-view catprod-rel">
  16.                 <?php
  17.                 $count = 0;
  18.                 foreach ($products as $product) {
  19.                         $count += 1;
  20.                 }
  21.                 if ($count>1){
  22.                 ?>
  23.                 <div class="title">С этим товаром покупают:</div>
  24.                 <?php } ?>
  25.                 <div class="row">
  26.                 <?php
  27.                         foreach ($products as $product) {
  28.                         $prod1 = $this->product->virtuemart_product_id;
  29.                         $prod2 = $product->virtuemart_product_id;
  30.                        
  31.                        
  32.                         if($prod1 != $prod2) {
  33.                         ?>
  34.        
  35.                         <div class="product floatleft ">
  36.                                     тут HTML карточки выводимого сопутствующего товара
  37.                          </div>
  38.  <?php } }
  39.                 ?>
  40.  


он должен выводить 3 сопутствующих товара. Работает как то странно: в большинстве случаев выводится только 2 товара, хотя в некоторых карточках выводится как положено по 3 товара.
В строке

CODE (htmlphp):
скопировать код в буфер обмена
  1. $products = $productModel->getProductListing('', 3, $category_id);

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

(Отредактировано автором: 05 Апреля, 2015 - 01:11:28)

 
 Top
gurvinek
Отправлено: 07 Апреля, 2015 - 19:09:16
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Отвечаю сам себе Улыбка

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

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2.  
  3.         $category_id = $this->product->categories[0];
  4.        
  5.         if ($filter_category ) $filter_category = TRUE;
  6.         $productModel = VmModel::getModel('Product');
  7.         $products = $productModel->getProductListing('', 0, $category_id);
  8.         $productModel->addImages($products);
  9.         $currency = CurrencyDisplay::getInstance( );
  10.        
  11.         ?>
  12.         <div id="catprod" class="browse-view catprod-rel">
  13.                 <?php
  14.                 $i = 0;
  15.                 shuffle($products);
  16.                 foreach ($products as $product) {
  17.                         $i++;
  18.                        
  19.                 }
  20.                 if ($i>1){
  21.                 ?>
  22.                 <div class="title">С этим товаром покупают:</div>
  23.                 <div class="row">
  24.                 <?php
  25.                 $cnt = 0;
  26.                         foreach ($products as $product) {
  27.                         $cnt++;
  28.         if($cnt >3) break;             
  29.                 //      if($prod1 != $prod2) {
  30.                         ?>
  31.        
  32.                         <div class="product floatleft ">
  33. и т.д.
  34.  
  35.  


и все заработало так, как хотелось (точнее осталось прикрутить исключение открытого товара, но это не критично)

Для первого foreach добавил shuffle($products);
теперь массив формируется случайным образом, а раньше шел по порядку (так даже лучше, т.к. товары теперь тоже отображаются случайно)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« CMS и фреймворки »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB