mikagolden Опубликовано 19 марта, 2011 Жалоба Поделиться Опубликовано 19 марта, 2011 Ребята приветствую!Есть задача, помогите реализовать...Список категорий выглядит так:-категория А 1 уровня --- категория А 2 уровня ------ категория А 3 уровня ------ категория Б 3 уровня --- категория Б 2 уровня---------------------------------в каждой категории 3-его уровня есть товар.Если в меню открыть категорию 2 уровня, то сразу выводиться большой список товаров из всех категорий 3 уровня...Как сделать так, чтобы открыв категорию 2 уровня - выводился список категорий 3 уровня, а не товаров.Прошу прощение за тавтологию)) Цитата Ссылка на сообщение Поделиться на другие сайты
alaster Опубликовано 19 марта, 2011 Жалоба Поделиться Опубликовано 19 марта, 2011 Перефразируя :Если в категории содержаться подкатегории, то при открытии оной должны отображаться именно описания категорий, а не товары.Угу ? Цитата Ссылка на сообщение Поделиться на другие сайты
alaster Опубликовано 19 марта, 2011 Жалоба Поделиться Опубликовано 19 марта, 2011 В Storefront.class.php ищем функциюfunction fetch()В условии:elseif (!empty($category) || !empty($brand)){// Если задана категория, выводим товары этой категорииreturn $this->fetch_products($category, $brand);}Включаем вовнутрь проверку на наличие подкатегорий.В таблице categories, ищем строку с url=$category, c этой строки тащим id категории.Далее проверяем найдется ли в этой же таблице строка с parent=найденный idЕсли найдется, значит есть подкатегории. Схематически выглядит так.elseif (!empty($category) || !empty($brand)){if (!subcategories_exist()) // Нет дочерних категорий return $this->fetch_products($category, $brand);else // Есть дочернии категории return $this->fetch_subcategories($category); // эту функцию предстоит дописать тоже ручками}fetch_subcategories($category) очевидным образом будет собирать нужные нам массивы в том числе новый массив подкатегорий (пусть он будет назван $subcats), $this->smarty->assign() их всех, и $this->body = $this->smarty->fetch('products.tpl')...В качестве примера можете взять fetch_products() функцию.После того, как мы передали $subcats в шаблон, можем его там смело использовать. Ну думаю элементы массива обладают такими свойствами как description и name. Большее наврядли потребуется.products.tpl Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 20 марта, 2011 Жалоба Поделиться Опубликовано 20 марта, 2011 Это можно сделать проще, не трогая движок, исправив только шаблон, без дописывания функций))) Цитата Ссылка на сообщение Поделиться на другие сайты
alaster Опубликовано 20 марта, 2011 Жалоба Поделиться Опубликовано 20 марта, 2011 Исхожу из того, что нам надо вывести при выборе категории (с детьми) ее:nameurlimagedescription$categories - дерево категорий, передается в шаблон и несет с собой только name и url категорий.$category - структура данных отражающих только текущую категорию, в ней уже есть и img, и description.Потому, картинки и описания нужных на данный момент категорий придется нести через другой массив (у меня он $subcats для примера назван).Нести все данные о категориях через $categories тоже можно, но это извращение.Можно обойтись и шаблоном:1) Проверяет что есть подкатегории.2) Выбирает с БД категории у которых parent равен текущему, выводит от них image и description.Тут надо не забыть разрешить Smarty внедрять php код напрямую в шаблоны.Но как же "отделение дизайна от кода" ? Атата ! Мы же хотим хороший код ?Конечно можно не трогая БД вывести просто названия ссылки-названия подкатегорий.Даже наверно с картинками (Учитывая механизм именования картинок). Цитата Ссылка на сообщение Поделиться на другие сайты
mikagolden Опубликовано 21 марта, 2011 Автор Жалоба Поделиться Опубликовано 21 марта, 2011 Kosjak76, Решение есть? код выложи...что на что поменять)) Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 21 марта, 2011 Жалоба Поделиться Опубликовано 21 марта, 2011 http://forum.simplacms.ru/comments.php?DiscussionID=394&page=1#Comment_3098 Цитата Ссылка на сообщение Поделиться на другие сайты
alaster Опубликовано 21 марта, 2011 Жалоба Поделиться Опубликовано 21 марта, 2011 Косяк прав! Я нуп и опозорился $category с собой все кишки тащит через categories_tree...Кот тады очевиден.{if $category->subcategories}{foreach item=cat from=$category->subcategories}{$cat->name|escape} {$cat->image} {$cat->description|escape}<br />{/foreach}{else} {if $products} {* выводим продукты как в шаблоне *} {/if}{/if}Естественно name, image и description под Ваш дизайн раскидать надо.А вставлять вместо: Цитата Ссылка на сообщение Поделиться на другие сайты
mikagolden Опубликовано 21 марта, 2011 Автор Жалоба Поделиться Опубликовано 21 марта, 2011 )))))) alaster вместо чего? Цитата Ссылка на сообщение Поделиться на другие сайты
alaster Опубликовано 21 марта, 2011 Жалоба Поделиться Опубликовано 21 марта, 2011 Вместо блока с выводом товаров в products.tpl{if $products}{* выводим продукты как в шаблоне *}{/if}Точнее сверху него дописываем:{if $category->subcategories}{foreach item=cat from=$category->subcategories}{$cat->name|escape} {$cat->image} {$cat->description|escape}<br /> {* Тут выводим категории как душа пожелает*}{/foreach}{else}а снизу {/if} закрыть не забываем, а то смарти фигу нам покажет Цитата Ссылка на сообщение Поделиться на другие сайты
mikagolden Опубликовано 21 марта, 2011 Автор Жалоба Поделиться Опубликовано 21 марта, 2011 Не могу сооразить...Вот список товара, который выводится в родительской категории: <!-- Товары /--> <div class="clear"><!-- /--></div> {foreach name=products item=product from=$products} <div id="cat_products_block"> <div id="cat_products_img"> <a href="products/{$product->url}"><img src="{if $product->small_image}files/products/{$product->small_image}{else}images/no_foto.gif{/if}" alt=""/></a> </div> <div id="cat_products_name"> <h3 tooltip='hit' product_id='{$product->product_id}'><a href="products/{$product->url}">{$product->category|escape} {$product->brand|escape} {$product->model|escape}</a></h3> </div> <div class="desc">{$product->description}<br> <form class=tovar_price action='cart' method=get style='float:left; width:300px;'> <table cellpadding="0" style="border-collapse: collapse"><tr><td> {foreach name=variants item=variant from=$product->variants} <input {if $product->variants|@count<2}style='display:none;'{/if} type=radio name=variant_id value='{$variant->variant_id}' {if $smarty.foreach.variants.first}checked{/if}>{$variant->name} <b><font style="font-size: 14pt">{$variant->discount_price*$currency->rate_from/$currency->rate_to|string_format:"%.0f"} {$currency->sign|escape}</font></b> <br> {/foreach} </td><td valign='top'><p style="margin-left: 11px"> {if $product->variants|@count>0} <input style='float:right;' class="execute" type=submit href="cart/add/{$product->product_id}" value='в корзину' onclick="document.cookie='from='+location.href+';path=/';this.form.submit();"> {/if} </td></tr></table> </form> </div> </div> {if $smarty.foreach.products.iteration%3 == 0} <div class="clear"><!-- /--></div> {/if} {/foreach} <div class="clear"><!-- /--></div> ....ГДЕ ЧТО НУЖНО ПОМЕНЯТЬ? Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 21 марта, 2011 Жалоба Поделиться Опубликовано 21 марта, 2011 Этот код трогать не нужно, нужно ДО него сделать проверку, и если есть подкатегории, то выводим их, если нет, то товары...Как еще подробней описать, я даже не знаю)))Напишите в аську... Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.