Kulibbin Опубликовано 3 апреля, 2013 Жалоба Поделиться Опубликовано 3 апреля, 2013 Может в 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 категории. Цитата Ссылка на сообщение Поделиться на другие сайты
aNbY Опубликовано 3 апреля, 2013 Жалоба Поделиться Опубликовано 3 апреля, 2013 А как при заходе в Бренд, вывести категории в которых присутствуют товары Бренда? Цитата Ссылка на сообщение Поделиться на другие сайты
Kulibbin Опубликовано 3 апреля, 2013 Автор Жалоба Поделиться Опубликовано 3 апреля, 2013 ну исправь мою функцию на отправку 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_твоего_бренда")) Цитата Ссылка на сообщение Поделиться на другие сайты
Ruslan Kopyl Опубликовано 4 апреля, 2013 Жалоба Поделиться Опубликовано 4 апреля, 2013 /** * 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(); } Цитата Ссылка на сообщение Поделиться на другие сайты
bulba_man Опубликовано 16 апреля, 2013 Жалоба Поделиться Опубликовано 16 апреля, 2013 подскажите, пожалуйста, реализацию следующего:в категориях товары должны группироваться по брендама в брендах по категориям. Цитата Ссылка на сообщение Поделиться на другие сайты
bystri Опубликовано 3 сентября, 2014 Жалоба Поделиться Опубликовано 3 сентября, 2014 Огромное спасибо, всё здорово работает Цитата Ссылка на сообщение Поделиться на другие сайты
ufaclub Опубликовано 7 мая, 2015 Жалоба Поделиться Опубликовано 7 мая, 2015 в новой версии симплы уже не работает. выводиться обычное меню Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.