Перейти к содержимому


Фото
- - - - -

Независимые категории 2-го и 3-го уровня

категории подкатегории второго уровня третьего уровня 2-го уровня 3-го уровня kors

  • Чтобы отвечать, сперва войдите на форум
6 ответов в теме

#1 Gregar

Gregar
  • Пользователь
  • 111 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 07.11.2014 - 03:30

Столкнулся с необходимостью сделать независимые категории 2-го уровня, а затем и 3-го уровня. Много читал на форуме о категориях, но решения для себя не нашел. После того как обратился за помощью, мне ответил: Kors и дал мне пищу для размышлений. По началу не совсем все было понятно, но немного подумав над тем, что и как работает я начал эксперименты.
У меня все получилось и все работает отлично.

На форуме многие решения сделаны на уровнях, но мне они не совсем подошли и я воспользовался методом который мне предложил Kors 

 

Сразу хочу обратится к тем, кто всегда любит критиковать, но сам писать ничего не хочет ибо бесплатные решения не их конек. 

Прошу не ругаться на код если вы не желаете предложить более удобный метод.

 

Задача: необходимо сделать в разных местах шаблона вывод различных уровней категорий. (в моем примере мне нужно было 3 уровня)

 

1) Для вывода первого уровня, используем стандартный код:

{function name=categories_tree}
{if $categories}
<ul class="menu">
{foreach $categories as $c}
{if $c->visible}
<li>
<a {if $category->id == $c->id}class="selected"{/if} href="catalog/{$c->url}" data-category="{$c->id}">{$c->name|escape}</a>
</li>
{/if}
{/foreach}
</ul>
</li>
{/if}
{/function}
{categories_tree categories=$categories}

2) Для вывода 2-го уровня категорий, используем код:

<ul class="cat-menu-2">
{foreach $categories as $c1}
{if $c1->visible && ($c1->id==$category->id || $c1->id==$category->parent_id)}
{foreach $c1->subcategories as $c2}
{if $c2->visible}
<li><a href="catalog/{$c2->url}" data-category="{$c2->id}">{$c2->name}</a></li>
{/if}
{/foreach}
{/if}
{/foreach}                  
</ul>

3) Для вывода 3-го уровня категорий, используем код:

{foreach $categories as $c1}
{if $c1->visible && ($c1->id==$category->id || $c1->id==$category->parent_id)}
{foreach $c1->subcategories as $c2}
{if $c2->visible}
{if $category->id == $c2->id}
 
{foreach $c2->subcategories as $c3}
{if $c3->visible}
<a href="catalog/{$c3->url}" data-category="{$c3->id}">{$c3->name}</a>
{/if}
{/foreach}

{/if}
{/if}
{/foreach}
{/if}
{/foreach} 

 

Вот таким вот способом можно вывести категории различных уровней в разных местах шаблона. 

 

Пример: В шапке сайта мы выводим родительские категории (категории 1-го уровня - пункт 1), в левом блоке выводим категории 2-го уровня. На самой странице выше товара выводим категории 3-го уровня. 

Памятка: категории отображаются только тогда когда они у нас имеются. Если мы перейдем в категорию "Бытовая техника" --> в ней у нас есть 2 категории второго уровня - они у нас будут отображаться в левом блоке, если в родительской категории нет 2-го уровня категорий - в этом случае у нас ничего не покажет. Точно так же и с категориями 3-го уровня.

 

Надеюсь кому-то это пригодится и облегчит поиски решения на форуме. 

 

 



#2 yr4ik

yr4ik
  • Фрилансер
  • 925 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 07.11.2014 - 03:52

уже представляю код для вывода категорий 5 уровня :blink:

{function name=categories_tree}
    {if $categories && $level == $need_level}
        <ul class="cat-level-{$level}">
            {foreach $categories as $c}
                {if $c->visible}
                <li>
                    {if $c->image}<img src="{$config->categories_images_dir}{$c->image}" alt="{$c->name|escape}">{/if}
                    <a {if $category->id == $c->id}class="selected"{/if} href="catalog/{$c->url}" data-category="{$c->id}">{$c->name|escape}</a>
                    {categories_tree categories=$c->subcategories level=$level+1}
                </li>
                {/if}
            {/foreach}
        </ul>
    {/if}
{/function}
 

Объявили этот код где нибудь в начале. Дальше просто вывод нужно го уровня будет таким:

{categories_tree categories=$categories level=0 need_level=2}

Где need_level - нужный уровень. 

 

Если нужны разные шаблоны, то в функции можно сделать проверку.

 

 

{if $level==1}

{elsif $level==xx}
и тд
{/if}
 


#3 simplashop

simplashop
  • Пользователь
  • 81 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x

Опубликовано 07.11.2014 - 13:51

уже представляю код для вывода категорий 5 уровня  :blink:

 

согласен, но надо чуток модифицироать код
 

{function name=categories_tree}
				{if $categories && $level == $need_level}
					<ul class="cat-level-{$level}">
						{foreach $categories as $c}
							{if $c->visible}
							<li>
								{if $c->image}<img src="{$config->categories_images_dir}{$c->image}" alt="{$c->name|escape}">{/if}
								<a {if $category->id == $c->id}class="selected"{/if} href="catalog/{$c->url}" data-category="{$c->id}">{$c->name|escape}</a>
								{categories_tree categories=$c->subcategories level=$level+1}
							</li>
							{/if}
						{/foreach}
					</ul>
				{else}
					{foreach $categories as $c}
						{if $c->visible}
							{categories_tree categories=$c->subcategories level=$level+1}
						{/if}
					{/foreach}
				{/if}
			{/function}
			{categories_tree categories=$categories level=1 need_level=2}


#4 Gregar

Gregar
  • Пользователь
  • 111 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 07.11.2014 - 15:29

согласен, но надо чуток модифицироать код
 

{function name=categories_tree}
				{if $categories && $level == $need_level}
					<ul class="cat-level-{$level}">
						{foreach $categories as $c}
							{if $c->visible}
							<li>
								{if $c->image}<img src="{$config->categories_images_dir}{$c->image}" alt="{$c->name|escape}">{/if}
								<a {if $category->id == $c->id}class="selected"{/if} href="catalog/{$c->url}" data-category="{$c->id}">{$c->name|escape}</a>
								{categories_tree categories=$c->subcategories level=$level+1}
							</li>
							{/if}
						{/foreach}
					</ul>
				{else}
					{foreach $categories as $c}
						{if $c->visible}
							{categories_tree categories=$c->subcategories level=$level+1}
						{/if}
					{/foreach}
				{/if}
			{/function}
			{categories_tree categories=$categories level=1 need_level=2}

 

А вот как нам тогда сделать так чтобы этот код: {categories_tree categories=$categories level=1 need_level=2} можно было стилизовать в удобной нам форме.

Напрмиер: 


<div class="cet-id">

<p><a href="#">имя категории</a></p>

</ul>



#5 simplashop

simplashop
  • Пользователь
  • 81 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x

Опубликовано 07.11.2014 - 16:52

А вот как нам тогда сделать так чтобы этот код: {categories_tree categories=$categories level=1 need_level=2} можно было стилизовать в удобной нам форме.

Напрмиер: 


<div class="cet-id">

<p><a href="#">имя категории</a></p>

</ul>

 

 

можно использовать дополнительную переменную при вызове. $cat_class например

{categories_tree categories=$categories level=1 need_level=2 cat_class="cet-id"}

{function name=categories_tree}
				{if $categories && $level == $need_level}
					<ul class="cat-level-{$level} {$cat_class}">
						{foreach $categories as $c}
							{if $c->visible}
							<li>
								{if $c->image}<img src="{$config->categories_images_dir}{$c->image}" alt="{$c->name|escape}">{/if}
								<a {if $category->id == $c->id}class="selected"{/if} href="catalog/{$c->url}" data-category="{$c->id}">{$c->name|escape}</a>
								{categories_tree categories=$c->subcategories level=$level+1}
							</li>
							{/if}
						{/foreach}
					</ul>
				{else}
					{foreach $categories as $c}
						{if $c->visible}
							{categories_tree categories=$c->subcategories level=$level+1}
						{/if}
					{/foreach}
				{/if}
			{/function}
			{categories_tree categories=$categories level=1 need_level=2 cat_class="cet-id"}


#6 vcontakte

vcontakte
  • Пользователь
  • 25 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 09.08.2019 - 18:57

Как сделать так то бы  при нажатии на ссылки  level == 2

в $level == 1 добавлялся class <ul class="submenu On">

а при нажатии на ссылки  $level == 1  "On" убирался или писался "Оff"  ???

 

 

$level == 1 -    подкатегория

level == 2   -        подподкатегория

 

{if $categories }


{if $level == 0} 
{foreach item=c from=$categories} {if $c->visible} 

{if $c->subcategories}
<li {if $category->id == $c->id}class="active"{/if} data-category="{$c->id}"><a href="category/{$c->url}">{$c->name}</a> 
	{include file='categories2.tpl' categories=$c->subcategories level=1 }</li>
{else}
<li><a href="category/{$c->url}">{$c->name}</a></li>
{/if}

{/if} 


{/foreach} {/if} 

{if $level == 1 }
<ul class="submenu">{foreach item=c from=$categories} {* Показываем только видимые категории *} {if $c->visible} {if $c->subcategories}
	<li {if $category->id == $c->id}class="active"{/if} data-category="{$c->id}"><a href="category/{$c->url}">{$c->name}</a>
		{include file='categories2.tpl' categories=$c->subcategories level=2 }</li>{else}
	<li {if $category->id == $c->id}class="active"{/if} data-category="{$c->id}"><a href="category/{$c->url}">{$c->name}</a></li>{/if} {/if} {/foreach}</ul>
{/if}



{if $level == 2}
<ul class="submenu">{foreach item=c from=$categories  }   {if $c->visible} 
	{if $c->subcategories }
	<li {if $category->id == $c->id}class="active"{/if} data-category="{$c->id}"><a href="category/{$c->url}">{$c->name}</a></li>{else}
	<li {if $category->id == $c->id}class="active"{/if} data-category="{$c->id}"><a href="category/{$c->url}">{$c->name}</a></li>{/if} {/if} {/foreach}</ul>
{/if}

{/if}


#7 shooroop

shooroop
  • Фрилансер
  • 975 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 09.08.2019 - 19:09

Как сделать так то бы  при нажатии на ссылки  level == 2

в $level == 1 добавлялся class <ul class="submenu On">

а при нажатии на ссылки  $level == 1  "On" убирался или писался "Оff"  ???

 



 

https://jquery-docs.ru/addClass/







Также с меткой «категории, подкатегории, второго уровня, третьего уровня, 2-го уровня, 3-го уровня, kors»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых