Как разобрать массив подкатегорий, исходя из их доппараметров? Есть решение

Доброго дня.

Очень прошу помощи в таком вопросе:
Имеем вывод массива подкатегорий в главном меню категорий магазина:

{$categories = $wa->shop->categories(0, null, true, true)}
  <ul class="categories flyout-nav">
    {foreach $categories as $cat}
      {if count($cat.childs)}
        <li class="collapsible"><a href="{$cat.url}">{$cat.name}</a><div class="flyout"><div class="container">
          <ul class="menu-v">
            {foreach $cat.childs as $subcat}
              <li><a href="{$subcat.url}" title="{$subcat.name}">{$subcat.name}</a></li>
            {/foreach}
          </ul>
        </div></div></li>
      {else}
        <li><a href="{$cat.url}">{$cat.name}</a></li>
      {/if}
    {/foreach}
  </ul>

В этом массиве вываливаются все подкатегории. Необходимо отделить "мух от котлет", т.е. разбить массив на 2-3 отдельные части, в зависимости от доппараметра категорий. Например, у подкатегорий есть доппараметры key=value1, key=value2. Надо, чтоб <ul class="menu-v">...</ul> отдавалось двумя-тремя частями в зависимости от наличия и значения доппараметра.

Выглядеть должно в итоге примерно так:

{if key=value1}
          <ul class="menu-v1">
            {foreach $cat.childs as $subcat}
              <li><a href="{$subcat.url}" title="{$subcat.name}">{$subcat.name}</a></li>
            {/foreach}
          </ul>
{elseif key=value2}
          <ul class="menu-v2">
            {foreach $cat.childs as $subcat}
              <li><a href="{$subcat.url}" title="{$subcat.name}">{$subcat.name}</a></li>
            {/foreach}
          </ul>
{else}
          <ul class="menu-v">
            {foreach $cat.childs as $subcat}
              <li><a href="{$subcat.url}" title="{$subcat.name}">{$subcat.name}</a></li>
            {/foreach}
          </ul>
{/if}

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

Заранее благодарю за помощь!

1 ответ

  • 2

    Вариант 1

    {$categories = $wa->shop->categories(0, null, true, true)}
    <ul class="categories flyout-nav">
       {foreach $categories as $cat}
       {if count($cat.childs)}
       <li class="collapsible"><a href="{$cat.url}">{$cat.name}</a><div class="flyout"><div class="container">
          {$new_categories = []}
          {foreach $cat.childs as $scat}
          {$param_val = false}
          {if array_key_exists('KEY',$scat.params)}
          {$param_val = $scat.params.KEY}
          {$new_categories[$param_val][] = $scat}
          {else}
          {$new_categories['other'][] = $scat}
          {/if}
          {/foreach}
          {if array_key_exists('value_1',$new_categories)}
          <ul class="menu-v1">
             {foreach $new_categories['value_1'] as $subcat}
             <li><a href="{$subcat.url}" title="{$subcat.name}">{$subcat.name}</a></li>
             {/foreach}
          </ul>
          {/if}
          {if array_key_exists('value_2',$new_categories)}
          <ul class="menu-v2">
             {foreach $new_categories['value_2'] as $subcat}
             <li><a href="{$subcat.url}" title="{$subcat.name}">{$subcat.name}</a></li>
             {/foreach}
          </ul>
          {/if}
          {if array_key_exists('other',$new_categories)}
          <ul class="menu-other">
             {foreach $new_categories['value_3'] as $subcat}
             <li><a href="{$subcat.url}" title="{$subcat.name}">{$subcat.name}</a></li>
             {/foreach}
          </ul>
          {/if}
       </div></div></li>
       {else}
       <li><a href="{$cat.url}">{$cat.name}</a></li>
       {/if}
       {/foreach}
    </ul>

    Вариант 2


    {$categories = $wa->shop->categories(0, null, true, true)}
    <ul class="categories flyout-nav">
       {foreach $categories as $cat}
       {if count($cat.childs)}
       <li class="collapsible"><a href="{$cat.url}">{$cat.name}</a>
          <div class="flyout">
             <div class="container">
             {$new_categories = []}
             {foreach $cat.childs as $scat}
             {$param_val = false}
             {if array_key_exists('KEY',$scat.params)}
             {$param_val = $scat.params.KEY}
             {$new_categories[$param_val][] = $scat}
             {else}
             {$new_categories['other'][] = $scat}
             {/if}
             {/foreach}
             {foreach $new_categories as $k=>$ssub}
             <ul class="menu-v{$k}">
             {foreach $ssub as $subcat}
                <li><a href="{$subcat.url}" title="{$subcat.name}">{$subcat.name}</a></li>
             {/foreach}
             </ul>
             {/foreach}
             </div>
          </div>
       </li>
       {else}
       <li><a href="{$cat.url}">{$cat.name}</a></li>
       {/if}
       {/foreach}
    </ul>
    • +1
      Плебей Плебей 11 ноября 2017 02:46 #

      Гена, спасибо тебе, добрый человек!

      То, что надо. Первый вариант "в лоб" не сработал, второй сработал сразу. Еще буду ковырять, хочу в зависимости от доппараметров добавить заголовки разделов меню (<ul>...</ul>).

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите