Jump to content

Связанные товары автоматом


Recommended Posts

Вот нашел на одном сайте, может кому пригодится -
открываем файл view/ProductView.php и в районе 144 строки находим код

$this->design->assign('related_products', $related_products);
}

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

else { // генерируемые связанные товары
$products->categories = $this->categories->get_categories(array('product_id'=>$product->id));
$category = reset($products->categories);

$related_products = array();
$after = false;

$products = $this->products->get_products(array('category_id' => $category->id, 'limit' => 100, 'in_stock'=>1, 'visible'=>1));

foreach($products as $p)
{
if($after && count($related_products) < 6)
$related_products[$p->id] = $p;
elseif($p->id == $product->id)
$after = true;
}

if(count($related_products) < 6)
foreach($products as $p)
if($p->id != $product->id && count($related_products) < 6)
$related_products[$p->id] = $p;
else break;

$related_products_images = $this->products->get_images(array('product_id'=>array_keys($related_products)));
foreach($related_products_images as $related_product_image)
if(isset($related_products[$related_product_image->product_id]))
$related_products[$related_product_image->product_id]->images[] = $related_product_image;
$related_products_variants = $this->variants->get_variants(array('product_id'=>array_keys($related_products), 'instock'=>true));
foreach($related_products_variants as $related_product_variant)
{
if(isset($related_products[$related_product_variant->product_id]))
{
$related_product_variant->price *= (100-$discount)/100;
$related_products[$related_product_variant->product_id]->variants[] = $related_product_variant;
}
}
foreach($related_products as $r)
{
$r->image = &$r->images[0];
$r->variant = &$r->variants[0];
}
$this->design->assign('related_products', $related_products);
} // end: генерируемые связанные товары

Логика заключается в том, что мы выбираем весь товары из категории (в скрипте есть ограничение в 100, если у Вас больше — увеличьте на предполагаемых длину). Скрипт выбирает связанный товар (6 штук), которые идут после данного товара. При достижении конца списка скрипт добирает нехватку ихз начала списка. Таким образом список связанных товар фиксированный до тех пока не внесут изменения в каталог.

Link to post
Share on other sites

Если это тот же туториал что был и на старую версию, лишь портированый на новую то это шлак. В связанных товарах (по статье на старую версию) как не крути выводился и тот товар на странице которого Вы находитесь, да в коде есть комментарии вроде как и не должен выводится в сопутствующих товарах тот товар на карточке которого мы находимся, но увы он также выводился.

Link to post
Share on other sites

Это не тот же код и логика тут другая.
Почему все гонятся за 100% подходящим им решением - как ни пытайся надоумить понять чужой код и исправить под себя - никак не получается.
Ни один движек и ни одна правка не будет полностью отвечать необходимым параметрам, как ни крути. А надо всего-то немного подумать и понять, что автор хотел этим сказать.
лишь портированый на новую то это шлак Может и есть недочеты, так почему Вы, уважаемый Нокстер, их копируете, а не предложите свое - альтернативное решение.
Я не стремлюсь писать код под чужие сайты - своей работы достаточно. а те решение, что предлагаю - это часть того, что уже работает и неплохо себя зарекомендовало. А выводить весь сайт, который писался под заказ (со всеми изменениями кода) не считаю честным и целесообразным, т.к. люди за это заплатили.

Link to post
Share on other sites

2 igoryk
Может сделаете репост всех статей :) А чего народ зря гонять куда-то... Если можно на форуме пофлудить, создав несколько раз 1 и ту же тему!!!

Link to post
Share on other sites
  • 1 month later...

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

igoryk - спасибо огромное, у меня заработало, но выдает ошибки/ Как решить?

Warning: Attempt to assign property of non-object in /home/k/#/#/public_html/view/ProductView.php on line 197

Warning: reset() [function.reset]: Passed variable is not an array or object in /home/k/#/#/public_html/view/ProductView.php on line 199

Warning: Cannot modify header information - headers already sent by (output started at /home/k/#/#/public_html/view/ProductView.php:197) in /home/k/#/#/public_html/view/ProductView.php on line 215

Warning: Cannot modify header information - headers already sent by (output started at /home/k/#/#/public_html/view/ProductView.php:197) in /home/k/#/#/public_html/index.php on line 32

Link to post
Share on other sites

Это предупреждения. В теории их можно просто игнорировать добавив в index.php
error_reporting(0);
А если по коду - там последовательность строк поменять. Сейчас не вспомню каких, но по логике те, что выбирают текущую категорию.

Link to post
Share on other sites
  • 2 years later...

Люди, подскажите, можно ли расширить стандартный функционал в админке в карточке товара, чтобы помимо конкретных связанных товаров, можно еще было выбирать категорию (несколько категорий), из которой(ых) выбирались бы связанные товары автоматом и рандомно, и бренд(бренды)!

 

Соответственно, если указана только категория (категории) - то рандомно выбираюся все товары (которые в наличии) всех брендов, а если указан бренд (бренды) - то отбираются товары только из этой категории (этих категорий) и только конкретного бренда (или выбранных брендов)?

Link to post
Share on other sites
  • 1 year later...
  • 6 months later...
  • 5 months later...

Это предупреждения. В теории их можно просто игнорировать добавив в index.php

error_reporting(0);

А если по коду - там последовательность строк поменять. Сейчас не вспомню каких, но по логике те, что выбирают текущую категорию.

 

Добрый вечер! mart, а подскажите пожалуйста, как исправить ошибку не прописывая index.php - error_reporting(0); ?

 

Ошибка как у yastranger

 

Warning: Attempt to assign property of non-object in /home/k/#/#/public_html/view/ProductView.php on line 197

Warning: reset() [function.reset]: Passed variable is not an array or object in /home/k/#/#/public_html/view/ProductView.php on line 199

Warning: Cannot modify header information - headers already sent by (output started at /home/k/#/#/public_html/view/ProductView.php:197) in /home/k/#/#/public_html/view/ProductView.php on line 215

Warning: Cannot modify header information - headers already sent by (output started at /home/k/#/#/public_html/view/ProductView.php:197) in /home/k/#/#/public_html/index.php on line 32
Link to post
Share on other sites

Noxter

Вы бы не могли пожалуйста помочь подкорректировать? Можно ли решить эту задачу или решение только игнорировать ошибки в index.php

Решить можно любую проблему.

Я по шею весь в проектах по этому помочь смогу но не скоро.

Link to post
Share on other sites

В присланном файле в строке 197 содержится

        // Категория и бренд товара,

то есть только комментарий.  Поэтому не может быть ошибки, которую Вы привели:

Warning: Attempt to assign property of non-object in /home/k/#/#/public_html/view/ProductView.php on line 197.

 

Могу предположить, что ошибка у Вас в строке 198, надо

$product->categories = $this->categories->get_categories(array('product_id'=>$product->id));

(убрать один лишний символ).

 

Если не поможет, то надо смотреть конкретно на Вашем сервере...

Link to post
Share on other sites
  • 3 months later...

В чем может быть ошибка?

Warning: Creating default object from empty value in /home/view/ProductView.php on line 141
141. $products->categories = $this->categories->get_categories(array('product_id'=>$product->id)); 
142. $category = reset($products->categories);
143.
144. $related_products = array();
Link to post
Share on other sites

 

В чем может быть ошибка?

Warning: Creating default object from empty value in /home/view/ProductView.php on line 141
141. $products->categories = $this->categories->get_categories(array('product_id'=>$product->id)); 
142. $category = reset($products->categories);
143.
144. $related_products = array();

 

написано же. вы создаете объект из пустого значения.

 

перед строкой 141 допишите

$products = new stdClass();
Link to post
Share on other sites

 

написано же. вы создаете объект из пустого значения.

 

перед строкой 141 допишите

$products = new stdClass();

Спасибо большое. Но если даже удалить строки

141. $products->categories = $this->categories->get_categories(array('product_id'=>$product->id)); 
142. $category = reset($products->categories);

то тоже работает

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...