Jump to content

Recommended Posts

Облазил много тем но ничего не подходит для меня.

есть категория, подкатегория и подподкатегория. Так вот, подскажите как вывести подподкатегории независимыми. То есть нажимаем на категории выводит список подподкатегорий, нажимаем на подкатегорию выводит подподкатегорий нажимаем на подподкатегории и тоже выводит подподкатегорий.

Спасибо.

Link to post
Share on other sites

Вам нужно вывести список подкатегорий на странице категории, или просто категории 3-го уровня в каталоге? Или же на каждый уровень категорий свой выпадающий список подкатегорий? Лучше будет если какой-то пример покажите.
 
Если подкатегории на странице категории то так:
 

{if $category->subcategories}
   <ul>
      {foreach $category->subcategories as $c}
         {if $c->visible}
            <li><a {if $category->id == $c->id}class="selected"{/if} href="catalog/{$c->url}">{$c->name}</a></li>
         {/if}
      {/foreach} 					
   </ul>
{/if}

 

Edited by STM
Link to post
Share on other sites

 

Вам нужно вывести список подкатегорий на странице категории, или просто категории 3-го уровня в каталоге? Или же на каждый уровень категорий свой выпадающий список подкатегорий? Лучше будет если какой-то пример покажите.

 

Если подкатегории на странице категории то так:

 

{if $category->subcategories}
   <ul>
      {foreach $category->subcategories as $c}
         {if $c->visible}
            <li><a {if $category->id == $c->id}class="selected"{/if} href="catalog/{$c->url}">{$c->name}</a></li>
         {/if}
      {/foreach} 					
   </ul>
{/if}

просто категории 3-го уровня в каталоге

Link to post
Share on other sites

просто категории 3-го уровня в каталоге

 

Можно так:

{if $categories}			
<ul>
   {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}</a>
      {if $c->subcategories}
      <ul>
         {foreach $c->subcategories as $cat}
         {if $cat->visible}
         <li>
            <a {if $category->id == $cat->id}class="selected"{/if} href="catalog/{$cat->url}" data-category="{$cat->id}">{$cat->name}</a>						
            {if $cat->subcategories}
            <ul>
               {foreach $cat->subcategories as $cat3}
               {if $cat3->visible}
	       <li>
		<a {if $category->id == $cat3->id}class="selected"{/if} href="catalog/{$cat3->url}" data-category="{$cat3->id}">{$cat3->name}</a>
               </li>
               {/if}
               {/foreach}						
            </ul>
            {/if}
         </li>
         {/if}
       {/foreach}						
      </ul>
      {/if}
   </li>
   {/if}
   {/foreach}
</ul>
{/if} 
Edited by STM
Link to post
Share on other sites

Если отдельно вывести 3-й уровень самый простой способ наверное так: 

{foreach $categories as $c}
        {foreach $c->subcategories as $cat}
               {foreach $cat->subcategories as $cat3}
	             <a {if $category->id == $cat3->id}class="selected"{/if} href="catalog/{$cat3->url}" data-category="{$cat3->id}">{$cat3->name}</a>
               {/foreach}						
	{/foreach}						
{/foreach}

Или что-то вроде этого:

 

{function name=categories_tree}
   {if $categories && $level == $c_level}
      <ul>
         {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>
               {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 c_level=3}	

c_level=3 нужный уровень

Edited by STM
Link to post
Share on other sites

Данный способ не подходит так как 3 уровень показывает только когда мы во втором уровне а когда мы в категории то не выводит

Link to post
Share on other sites

 

Данный способ не подходит так как 3 уровень показывает только когда мы во втором уровне а когда мы в категории то не выводит

Можете показать что Вы пытаетесь сделать? То я что-то совсем перестал Вас понимать.

Link to post
Share on other sites

Можете показать что Вы пытаетесь сделать? То я что-то совсем перестал Вас понимать.

https://www.silverskazka.ru

Вывод категорий на странице товаров как тут. Только у меня верху должны выводится категории 3 уровня.

Делаю сюда http://finanse.horror-quest.com.ua

Link to post
Share on other sites

https://www.silverskazka.ru

Вывод категорий на странице товаров как тут. Только у меня верху должны выводится категории 3 уровня.

Делаю сюда http://finanse.horror-quest.com.ua

Если правильно понял вам нужно 3-х уровненвое меню взять http://vadikom.github.io/smartmenus/src/demo/bootstrap-navbar.html и сделать вывод по принципу что я выше поедлагал для 3-х уровней. Edited by STM
Link to post
Share on other sites

 

Если правильно понял вам нужно 3-х уровненвое меню взять http://vadikom.github.io/smartmenus/src/demo/bootstrap-navbar.html и сделать вывод по принципу что я выше поедлагал для 3-х уровней.

Мне нужно чтоб в любой из категорий выводился только 3 уровень.

Link to post
Share on other sites

Если отдельно вывести 3-й уровень самый простой способ наверное так: 

{foreach $categories as $c}
        {foreach $c->subcategories as $cat}
               {foreach $cat->subcategories as $cat3}
	             <a {if $category->id == $cat3->id}class="selected"{/if} href="catalog/{$cat3->url}" data-category="{$cat3->id}">{$cat3->name}</a>
               {/foreach}						
	{/foreach}						
{/foreach}

Или что-то вроде этого:

 

{function name=categories_tree}
   {if $categories && $level == $c_level}
      <ul>
         {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>
               {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 c_level=3}	

c_level=3 нужный уровень

{foreach $categories as $c}
        {foreach $c->subcategories as $cat}
               {foreach $cat->subcategories as $cat3}
	             <a {if $category->id == $cat3->id}class="selected"{/if} href="catalog/{$cat3->url}" data-category="{$cat3->id}">{$cat3->name}</a>
               {/foreach}						
	{/foreach}						
{/foreach}

спасибо. То что надо вот только всегда выводятся категории 3 уровня только первой категории. тоесть если листаю между главными категориями то все равно выводятся подкатегории первой в списке категории

Link to post
Share on other sites

Если правильно понял вам нужно 3-х уровненвое меню взять http://vadikom.github.io/smartmenus/src/demo/bootstrap-navbar.html и сделать вывод по принципу что я выше поедлагал для 3-х уровней.

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

{foreach $categories as $c}
        {foreach $c->subcategories as $cat}
               {foreach $cat->subcategories as $cat3}
	             <a {if $category->id == $cat3->id}class="selected"{/if} href="catalog/{$cat3->url}" data-category="{$cat3->id}">{$cat3->name}</a>
               {/foreach}						
	{/foreach}						
{/foreach}

по этому коду. Спасибо

Link to post
Share on other sites

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

{foreach $categories as $c}
        {foreach $c->subcategories as $cat}
               {foreach $cat->subcategories as $cat3}
	             <a {if $category->id == $cat3->id}class="selected"{/if} href="catalog/{$cat3->url}" data-category="{$cat3->id}">{$cat3->name}</a>
               {/foreach}						
	{/foreach}						
{/foreach}
по этому коду. Спасибо

 

 

Пирамидка пифагора :)
Link to post
Share on other sites

Можете подсказать, как правильно сделать?

Как вариант пройтись рекурсивно по дереву категорий, и при условии что у нас в пути содержится не более 3-х категорий вывести категорию третьего уровня.

Код примерно такой:

{function name=flex}
{foreach $categories as $c}
{if $c->path|count == 3}
<b>{$c->name}</b>
{/if}
{flex categories=$c->subcategories}
{/foreach}
{/function}

 

В нужном месте выводим результат выполнения функции вот так:

{flex categories = $categories}

Конечно не лучшее решение, но вполне рабочее.

Edited by Noxter
Link to post
Share on other sites

Как вариант пройтись рекурсивно по дереву категорий, и при условии что у нас в пути содержится не более 3-х категорий вывести категорию третьего уровня.

Код примерно такой:

{function name=flex}
{foreach $categories as $c}
{if $c->path|count == 3}
<b>{$c->name}</b>
{/if}
{flex categories=$c->subcategories}
{/foreach}
{/function}

 

В нужном месте выводим результат выполнения функции вот так:

{flex categories = $categories}

Конечно не лучшее решение, но вполне рабочее.

Почему то выводит категории 3 уровня всех категорий. А нужно чтоб был 3 уровень активной категории 1 уровня. Можете помочь?

Link to post
Share on other sites

Почему то выводит категории 3 уровня всех категорий. А нужно чтоб был 3 уровень активной категории 1 уровня. Можете помочь?

Ну добавьте условие на уровень $c->level == 1 + in_array($category->id, $c->childs) + $c->visible
Link to post
Share on other sites
  • 2 years 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...