Способ 3.
1. view/ProductsView.php
после
$images = $this->products->get_images(array('product_id'=>$products_ids));
foreach($images as $image) {
$products[$image->product_id]->images[] = $image;
}
добавить
$bids = array();
$brands = array();
foreach($products as $product) {
$bids[] = $product->brand_id;
}
if($bids){
$temps = $this->brands->get_brands(array('id'=>$bids));
foreach($temps as $temp) {
$brands[$temp->id]= $temp;
}
$this->design->assign('brands', $brands);
}
2. design/ваш_шаблон/html/product_list.tpl
В нужном месте внутри цикла
{if $product->brand_id}
<a href="brands/{$brands[$product->brand_id]->url}" class="product_brand_link">{$brands[$product->brand_id]->name}</a>
{/if}
По сравнению с предыдущими двумя предложениями
1. Не усложняются бесполезной нагрузкой "чужие" запросы, как в способе 1.
2. Не добавляется чрезмерная нагрузка на базу , как в способе 2. Добавляется лишь один запрос.
IvanovMARK писал(а):P.S. Не так уж мало мест, где теперь еще надо обращаться к тому же get_brand, чтобы вывести бренд в превью товаров в хитах, новинках и акционных товарах, в сравнении товаров, избранных и рекомендуемых товарах. Так что склоняюсь к тому, что мое изначальное решение было ничем не хуже а то и лучше.
vedastudio@gmail.com
Если хотите выводить и в других местах, то приведенный способ можно изменить так: в View.php получать и отправлять в Smarty данные по всем брендам, подобно тому, как делается сейчас, например, для всех языков. Это даст возможность в ЛЮБОМ шаблоне без дополнительных ухищрений использовать конструкции вида
{$brands[$product->brand_id]->url, {$brands[$product->brand_id]->name.
Затраты - всего лишь один доп запрос. А может, этим способом еще можно сэкономить на прочих запросах по брендам, например, тем, которые в том же ProductsView.php кое-где даже по одному в циклах делаются...
Способ 3.
1. view/ProductsView.php
после
$images = $this->products->get_images(array('product_id'=>$products_ids));
foreach($images as $image) {
$products[$image->product_id]->images[] = $image;
}
добавить
$bids = array();
$brands = array();
foreach($products as $product) {
$bids[] = $product->brand_id;
}
if($bids){
$temps = $this->brands->get_brands(array('id'=>$bids));
foreach($temps as $temp) {
$brands[$temp->id]= $temp;
}
$this->design->assign('brands', $brands);
}
2. design/ваш_шаблон/html/product_list.tpl
В нужном месте внутри цикла
{if $product->brand_id}
<a href="brands/{$brands[$product->brand_id]->url}" class="product_brand_link">{$brands[$product->brand_id]->name}</a>
{/if}
По сравнению с предыдущими двумя предложениями
1. Не усложняются бесполезной нагрузкой "чужие" запросы, как в способе 1.
2. Не добавляется чрезмерная нагрузка на базу , как в способе 2. Добавляется лишь один запрос.
[quote="IvanovMARK"]P.S. Не так уж мало мест, где теперь еще надо обращаться к тому же get_brand, чтобы вывести бренд в превью товаров в хитах, новинках и акционных товарах, в сравнении товаров, избранных и рекомендуемых товарах. Так что склоняюсь к тому, что мое изначальное решение было ничем не хуже а то и лучше.
vedastudio@gmail.com[/quote]
Если хотите выводить и в других местах, то приведенный способ можно изменить так: в View.php получать и отправлять в Smarty данные по всем брендам, подобно тому, как делается сейчас, например, для всех языков. Это даст возможность в ЛЮБОМ шаблоне без дополнительных ухищрений использовать конструкции вида
{$brands[$product->brand_id]->url, {$brands[$product->brand_id]->name.
Затраты - всего лишь один доп запрос. А может, этим способом еще можно сэкономить на прочих запросах по брендам, например, тем, которые в том же ProductsView.php кое-где даже по одному в циклах делаются...