Jump to content

Список товаров под категориями на главной


Recommended Posts

Может в Simple и есть такая возможность (Вывести под каждой категорией список содержащихся в ней продуктов на главной странице), но я не нашел...
Пришлось немного менять код.
Оставляю свое решение этой проблемы для тех, кто столкнется с такой же ситуацией. И для себя на будущее. Потому как знаю, что забуду его уже через неделю)
И так...
В файле /view/View.php добавляем:
после строк

 // Настраиваем плагины для смарти
$this->design->smarty->registerPlugin("function", "get_posts", array($this, 'get_posts_plugin'));
$this->design->smarty->registerPlugin("function", "get_brands", array($this, 'get_brands_plugin'));
$this->design->smarty->registerPlugin("function", "get_browsed_products", array($this, 'get_browsed_products'));
$this->design->smarty->registerPlugin("function", "get_featured_products", array($this, 'get_featured_products_plugin'));
$this->design->smarty->registerPlugin("function", "get_new_products", array($this, 'get_new_products_plugin'));
$this->design->smarty->registerPlugin("function", "get_discounted_products", array($this, 'get_discounted_products_plugin'));

следующую строку

$this->design->smarty->registerPlugin("function", "get_cat_products", array($this, 'get_cat_products_plugin'));

и еще вставляем функцию

public function get_cat_products_plugin($params, &$smarty)
{
if(!isset($params['visible']))
$params['visible'] = 1;
if(!empty($params['category_id']))
{
foreach($this->products->get_products($params) as $p)
$products[$p->id] = $p;

if(!empty($products))
{
// id выбраных товаров
$products_ids = array_keys($products);

// Выбираем варианты товаров
$variants = $this->variants->get_variants(array('product_id'=>$products_ids, 'in_stock'=>true));

// Для каждого варианта
foreach($variants as &$variant)
{
// добавляем вариант в соответствующий товар
$products[$variant->product_id]->variants[] = $variant;
}

// Выбираем изображения товаров
$images = $this->products->get_images(array('product_id'=>$products_ids));
foreach($images as $image)
$products[$image->product_id]->images[] = $image;

foreach($products as &$product)
{
if(isset($product->variants[0]))
$product->variant = $product->variants[0];
if(isset($product->images[0]))
$product->image = $product->images[0];
}
}

$smarty->assign($params['var'], $products);

}
}

можно сразу после этих строк

 /**
*
* Плагины для смарти
*
*/ 

(для чайников) Главное другие функции не разорвите

затем в зависимости от Ваших потребностей в дизайне... в файле index.tpl или main.tpl или еще каком
вставляем строки для вывода категорий с продуктами

<!-- Меню каталога --> <div id="catalog_menu"> {* Рекурсивная функция вывода дерева категорий *} {function name=categories_tree} {if $categories} <ul> {foreach $categories as $c} {* Показываем только видимые категории *} {if $c->visible} <li> {if $c->image}<img src="{$config->categories_images_dir}{$c->image}" alt="{$c->name}">{/if} <a {if $category->id == $c->id}class="selected"{/if} href="catalog/{$c->url}" data-category="{$c->id}">{$c->name}</a> {get_cat_products category_id=$c->id var=products} <!--Каталог товаров--> {if $products} <!-- Список товаров--> <ul class="products"> {foreach $products as $product} <!-- Товар--> <li class="product"> <!-- Фото товара --> {if $product->image} <div class="image"> <a href="products/{$product->url}"><img src="{$product->image->filename|resize:50:50}" alt="{$product->name|escape}"/></a> </div> {/if} <!-- Фото товара (The End) --> <div class="product_info"> <!-- Название товара --> <h3 class="{if $product->featured}featured{/if}"><a data-product="{$product->id}" href="products/{$product->url}">{$product->name|escape}</a></h3> <!-- Название товара (The End) --> </div> </li> <!-- Товар (The End)--> {/foreach} </ul> <!-- Список товаров (The End)--> {else} Товары не найдены {/if} <!--Каталог товаров (The End)--> {categories_tree categories=$c->subcategories} </li> {/if} {/foreach} </ul> {/if} {/function} {categories_tree categories=$categories} </div> <!-- Меню каталога (The End)-->

ключевая строка здесь 

{get_cat_products category_id=$c->id var=products} 

вызывает созданную нами функцию (плагин smarty) с параметром id категории.

Link to post
Share on other sites

ну исправь мою функцию на отправку sql запроса
с помощью $this->db->query($this->db->placehold("sql запрос"));

если я ни чего не напутал запрос ниже

SELECT c.name FROM __categories cWHERE c.id IN (SELECT pc.category_id FROM __products_categories pc  WHERE pc.product_id IN (SELECT p.id FROM __products p WHERE p.brand_id="id_твоего_бренда"))
Link to post
Share on other sites

/**     * Categories::get_brand_category()     *      * @author Ruslan Kopyl 07/03/13     * @param mixed $brand_url     * @return array массив с категориями для переданного бренда     */    public function get_brand_category($brand_url)    {         $sql = 'SELECT c.id, c.name, c.url, b.url AS brand                FROM __categories AS c                LEFT JOIN __products_categories AS pc                ON pc.category_id = c.id                LEFT JOIN __products AS p                ON p.id = pc.product_id                LEFT JOIN __brands AS b                ON b.id = p.brand_id                WHERE b.url = ?                AND c.visible = 1                GROUP BY c.id                ORDER BY c.name ASC';                $this->db->query($sql, $brand_url);        return $this->db->results();    }
Link to post
Share on other sites
  • 2 weeks later...
  • 1 year later...
  • 8 months later...

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...