get31 Posted January 7, 2024 Report Share Posted January 7, 2024 Добрый день форумчани, и со всеми праздниками! Хочу вывести связанные товары в каталоге к каждому товару (где есть связанные товары у товара). В 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} Но почему не отображаются?( Quote Link to post Share on other sites
phukortsin Posted January 7, 2024 Report Share Posted January 7, 2024 Возможно, потому, что данные не переданы в шаблон... Quote Link to post Share on other sites
get31 Posted January 7, 2024 Author Report Share Posted January 7, 2024 20 минут назад, phukortsin сказал: Возможно, потому, что данные не переданы в шаблон... пробовал методом $product->related_products = array(); чтобы вывести через $product->related_products и тоже не работает( Quote Link to post Share on other sites
phukortsin Posted January 8, 2024 Report Share Posted January 8, 2024 Пробовать лишь бы как методом тыка - не лучшая стратегия... Quote Link to post Share on other sites
get31 Posted January 8, 2024 Author Report Share Posted January 8, 2024 20 минут назад, phukortsin сказал: Пробовать лишь бы как методом тыка - не лучшая стратегия... вывести где угодно "методом тыка" получается, а вот в каталоге нет....аналогичный метод а ТЫК не работает... Quote Link to post Share on other sites
phukortsin Posted January 8, 2024 Report Share Posted January 8, 2024 1 час назад, get31 сказал: вывести где угодно "методом тыка" получается, а вот в каталоге нет....аналогичный метод а ТЫК не работает... Очень сомневаюсь, что Вы сможете это сделать "где угодно". И дополнительно возникает вопрос о смысле этого "где угодно". У Вас получается вывести абсолютно ВО ВСЕХ местах, кроме каталога? Все у Вас получается на главной, на странице корзины, на странице заказа, на инфостраницах, в блоге, в личном кабинете, в письмах? Может, сможете описать полностью свое рабочее решение хоть в одном из перечисленных случаев? Quote Link to post Share on other sites
get31 Posted January 8, 2024 Author Report Share Posted January 8, 2024 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 сказал: Возможно ....одни сомнения в ответах Quote Link to post Share on other sites
phukortsin Posted January 9, 2024 Report Share Posted January 9, 2024 Видно четко, что во втором коде данные в шаблон передаются. А в первом НЕ передаются. Quote Link to post Share on other sites
get31 Posted January 9, 2024 Author Report Share Posted January 9, 2024 5 минут назад, phukortsin сказал: Видно четко, что во втором коде данные в шаблон передаются. А в первом НЕ передаются. Я ранее уже писал что: В 07.01.2024 в 16:03, get31 сказал: через $product->related_products и тоже не работает Quote Link to post Share on other sites
phukortsin Posted January 9, 2024 Report Share Posted January 9, 2024 Оно и не должно работать. Если считаете, что должно, то пишите ТОЧНЫЕ объяснения, с какой стати это должно работать. Причина все та же - нужные данные в шаблон НЕ передаются. Quote Link to post Share on other sites
get31 Posted January 9, 2024 Author Report Share Posted January 9, 2024 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]); } } } Quote Link to post Share on other sites
Kosjak76 Posted January 9, 2024 Report Share Posted January 9, 2024 $product->related_products = array(); Как бы вот это хрень полная)) В OrderView $order ОДИН , а в ProductsView $product - его НЕТ, он существует только внутри $products Если не имеете понятия, что делаете и зачем - лучше не лезть Quote Link to post Share on other sites
get31 Posted January 9, 2024 Author Report Share Posted January 9, 2024 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); } Quote Link to post Share on other sites
phukortsin Posted January 9, 2024 Report Share Posted January 9, 2024 1 час назад, get31 сказал: Почему в шаблоне связанный товар отображается на всех товарах? а не для каждого свой (если есть связанные товары)? Видимо, потому что автор так запрограммировал. По тому, что предоставлено, видно что они В ПРИНЦИПЕ не могут отображаться "для каждого свой", поскольку автор их свалил в одну кучу в одной переменной без какого бы то ни было разделения. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.