get31 Опубликовано 7 января Жалоба Поделиться Опубликовано 7 января Добрый день форумчани, и со всеми праздниками! Хочу вывести связанные товары в каталоге к каждому товару (где есть связанные товары у товара). В ProductsView.php вставляю: $related_ids = array(); $related_products = array(); foreach($this->products->get_related_products($products_ids) as $p) { $related_ids[] = $p->related_id; $related_products[$p->related_id] = null; } if(!empty($related_ids)) { foreach($this->products->get_products(array('id'=>$related_ids, 'in_stock'=>1, 'visible'=>1)) as $p) $related_products[$p->id] = $p; $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), 'in_stock'=>1)); foreach($related_products_variants as $related_product_variant) { if(isset($related_products[$related_product_variant->product_id])) { $related_products[$related_product_variant->product_id]->variants[] = $related_product_variant; } } foreach($related_products as $id=>$r) { if(is_object($r)) { $r->image = &$r->images[0]; $r->variant = &$r->variants[0]; } else { unset($related_products[$id]); } } } ну и в шаблоне products.tpl вывожу {if $related_products} тут отображение связанных товаров {/if} Но почему не отображаются?( Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 7 января Жалоба Поделиться Опубликовано 7 января Возможно, потому, что данные не переданы в шаблон... Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 7 января Автор Жалоба Поделиться Опубликовано 7 января 20 минут назад, phukortsin сказал: Возможно, потому, что данные не переданы в шаблон... пробовал методом $product->related_products = array(); чтобы вывести через $product->related_products и тоже не работает( Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 8 января Жалоба Поделиться Опубликовано 8 января Пробовать лишь бы как методом тыка - не лучшая стратегия... Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 8 января Автор Жалоба Поделиться Опубликовано 8 января 20 минут назад, phukortsin сказал: Пробовать лишь бы как методом тыка - не лучшая стратегия... вывести где угодно "методом тыка" получается, а вот в каталоге нет....аналогичный метод а ТЫК не работает... Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 8 января Жалоба Поделиться Опубликовано 8 января 1 час назад, get31 сказал: вывести где угодно "методом тыка" получается, а вот в каталоге нет....аналогичный метод а ТЫК не работает... Очень сомневаюсь, что Вы сможете это сделать "где угодно". И дополнительно возникает вопрос о смысле этого "где угодно". У Вас получается вывести абсолютно ВО ВСЕХ местах, кроме каталога? Все у Вас получается на главной, на странице корзины, на странице заказа, на инфостраницах, в блоге, в личном кабинете, в письмах? Может, сможете описать полностью свое рабочее решение хоть в одном из перечисленных случаев? Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 8 января Автор Жалоба Поделиться Опубликовано 8 января 12 минут назад, phukortsin сказал: Может, сможете описать полностью свое рабочее решение хоть в одном из перечисленных случаев? Пруфы нужны? Та не вопрос. В OrderView после foreach($purchases as &$purchase){ } добавляем: $order->related_products = array(); $related_ids = array(); $related_products = array(); foreach($this->products->get_related_products($products_ids) as $p) { $related_ids[] = $p->related_id; $related_products[$p->related_id] = null; } if(!empty($related_ids)) { foreach($this->products->get_products(array('id'=>$related_ids, 'in_stock'=>1, 'visible'=>1)) as $p) $related_products[$p->id] = $p; $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), 'in_stock'=>1)); foreach($related_products_variants as $related_product_variant) { if(isset($related_products[$related_product_variant->product_id])) { $related_products[$related_product_variant->product_id]->variants[] = $related_product_variant; } } foreach($related_products as $id=>$r) { if(is_object($r)) { $r->image = &$r->images[0]; $r->variant = &$r->variants[0]; $order->related_products[] = $r; } else { unset($related_products[$id]); } } } В шаблоне выводим: {if $order->related_products} тут связанные товары {/if} 17 минут назад, phukortsin сказал: Очень сомневаюсь Еще есть сомнения? В 07.01.2024 в 15:41, phukortsin сказал: Возможно ....одни сомнения в ответах Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 9 января Жалоба Поделиться Опубликовано 9 января Видно четко, что во втором коде данные в шаблон передаются. А в первом НЕ передаются. Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 9 января Автор Жалоба Поделиться Опубликовано 9 января 5 минут назад, phukortsin сказал: Видно четко, что во втором коде данные в шаблон передаются. А в первом НЕ передаются. Я ранее уже писал что: В 07.01.2024 в 16:03, get31 сказал: через $product->related_products и тоже не работает Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 9 января Жалоба Поделиться Опубликовано 9 января Оно и не должно работать. Если считаете, что должно, то пишите ТОЧНЫЕ объяснения, с какой стати это должно работать. Причина все та же - нужные данные в шаблон НЕ передаются. Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 9 января Автор Жалоба Поделиться Опубликовано 9 января 5 минут назад, phukortsin сказал: Оно и не должно работать. Если считаете, что должно, то пишите ТОЧНЫЕ объяснения, с какой стати это должно работать. Причина все та же - нужные данные в шаблон НЕ передаются. Интересная логика получается, по коду для OrderView данные передаются, а для ProductsView не передаются, а код идентичный))) $product->related_products = array(); $related_ids = array(); $related_products = array(); foreach($this->products->get_related_products($products_ids) as $p) { $related_ids[] = $p->related_id; $related_products[$p->related_id] = null; } if(!empty($related_ids)) { foreach($this->products->get_products(array('id'=>$related_ids, 'in_stock'=>1, 'visible'=>1)) as $p) $related_products[$p->id] = $p; $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), 'in_stock'=>1)); foreach($related_products_variants as $related_product_variant) { if(isset($related_products[$related_product_variant->product_id])) { $related_products[$related_product_variant->product_id]->variants[] = $related_product_variant; } } foreach($related_products as $id=>$r) { if(is_object($r)) { $r->image = &$r->images[0]; $r->variant = &$r->variants[0]; $product->related_products[] = $r; } else { unset($related_products[$id]); } } } Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 9 января Жалоба Поделиться Опубликовано 9 января $product->related_products = array(); Как бы вот это хрень полная)) В OrderView $order ОДИН , а в ProductsView $product - его НЕТ, он существует только внутри $products Если не имеете понятия, что делаете и зачем - лучше не лезть Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 9 января Автор Жалоба Поделиться Опубликовано 9 января 1 час назад, Kosjak76 сказал: $product->related_products = array(); Как бы вот это хрень полная)) В OrderView $order ОДИН , а в ProductsView $product - его НЕТ, он существует только внутри $products Если не имеете понятия, что делаете и зачем - лучше не лезть Почему в шаблоне связанный товар отображается на всех товарах? а не для каждого свой (если есть связанные товары)? $related_ids = array(); $related_products = array(); foreach($this->products->get_related_products($products_ids) as $p) { $related_ids[] = $p->related_id; $related_products[$p->related_id] = null; } if(!empty($related_ids)) { foreach($this->products->get_products(array('id'=>$related_ids, 'visible'=>1)) as $p) $related_products[$p->id] = $p; $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), 'in_stock'=>1)); foreach($related_products_variants as $related_product_variant) { if(isset($related_products[$related_product_variant->product_id])) { $related_products[$related_product_variant->product_id]->variants[] = $related_product_variant; } } foreach($related_products as $id=>$r) { if(is_object($r)) { $r->image = &$r->images[0]; $r->variant = &$r->variants[0]; } else { unset($related_products[$id]); } } $this->design->assign('related_products', $related_products); } Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 9 января Жалоба Поделиться Опубликовано 9 января 1 час назад, get31 сказал: Почему в шаблоне связанный товар отображается на всех товарах? а не для каждого свой (если есть связанные товары)? Видимо, потому что автор так запрограммировал. По тому, что предоставлено, видно что они В ПРИНЦИПЕ не могут отображаться "для каждого свой", поскольку автор их свалил в одну кучу в одной переменной без какого бы то ни было разделения. Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.