Smarty меню генерации - PullRequest
       22

Smarty меню генерации

1 голос
/ 28 декабря 2011

Почему-то я не могу заставить этот код Smarty работать должным образом:

{assign var='number_of_levels' value=2}
{if isset($menuparams.number_of_levels)}
  {assign var='number_of_levels' value=$menuparams.number_of_levels}
{/if}

{if $count > 0}
<div id="sbi_container" class="sbi_container">

    {foreach from=$nodelist item=node}
        {if $node->depth == 1}
            <div class="sbi_panel" data-bg="images/3.jpg">
                <a href="#" class="sbi_label">{$node->menutext}</a>
                <div class="sbi_content">
                    <ul>
        {/if}

        {if $node->depth > 1}
                        <li><a href="{$node->url}">{$node->menutext}</a></li>
        {/if}

        {if $node->depth == 1 && $node->depth < $node->prevdepth}
                    </ul>
                </div>
            </div>
        {/if}
    {/foreach}
    </div>
{/if}

Желаемый вывод выглядит так:

                <div id="sbi_container" class="sbi_container">

                <div class="sbi_panel" data-bg="images/3.jpg">
                    <a href="#" class="sbi_label">Web / Smartphones</a>
                    <div class="sbi_content">
                        <ul>
                            <li><a href="#">Subitem</a></li>
                            <li><a href="#">Subitem</a></li>
                            <li><a href="#">Subitem</a></li>
                        </ul>
                    </div>
                </div>

                <div class="sbi_panel" data-bg="images/4.jpg">
                    <a href="#" class="sbi_label">Brothers</a>
                    <div class="sbi_content">
                        <ul>
                            <li><a href="#">Subitem</a></li>
                            <li><a href="#">Subitem</a></li>
                            <li><a href="#">Subitem</a></li>
                        </ul>
                    </div>
                </div>

                <div class="sbi_panel" data-bg="images/5.jpg">
                    <a href="#" class="sbi_label">Video / Scripts</a>
                    <div class="sbi_content">
                        <ul>
                            <li><a href="#">Subitem</a></li>
                            <li><a href="#">Subitem</a></li>
                            <li><a href="#">Subitem</a></li>
                        </ul>
                    </div>
                </div>

            </div>

Заполнение содержимого не является проблемой, но мне не удается воссоздать иерархический порядок с элементами div / ul / li. Меню имеет только два уровня.

Пожалуйста, помогите, я чувствую себя глупо, что не могу сделать это сам. Спасибо, бабло!

Ответы [ 3 ]

0 голосов
/ 29 декабря 2011

ОК, вот что я искал.Структура как-то нелогична, но она идеально соответствует моим потребностям:

{if $count > 0}
<div id="sbi_container" class="sbi_container">
    {foreach from=$nodelist item=node}
        {if $node->index <> 0}
            {if $node->depth == 1}
                {if $node->depth < $node->prevdepth}
                            </ul>
                        </div>
                    </div>
                {/if}
                <div class="sbi_panel" data-bg="images/3.jpg">
                    <a href="#" class="sbi_label">{$node->menutext}</a>
                    <div class="sbi_content">
                        <ul>
            {/if}

            {if $node->depth == 2}
                            <li><a href="{$node->url}">{$node->menutext}</a></li>
            {/if}
        {/if}
    {/foreach}
    </div>
{/if}
0 голосов
/ 27 октября 2012

Я думаю, вам нужно что-то вроде этого (работает с Smarty3)

<ul>
{function name=mytree}
   {foreach $data as $entry}
     <li>{$entry.label}</li>
   {if is_array($entry.children)}
      <ul>{mytree data=$entry.children}</ul>
   {/if}
   {/foreach}
{/function}
{mytree data=$same_array}
</ul>

Результат:

<ul>
  <li>Option 1</li>
  <li>Option 2
    <ul>
      <li>Option 2-1</li>
      <li>Option 2-2
        <ul>
          <li>Option 2-2-1</li>
          <li>Option 2-2-2</li>
        </ul>
      </li>
      <li>Option 2-3</li>
    </ul>
  </li>
  <li>Option 3</li>
</ul>
0 голосов
/ 28 декабря 2011

Я бы использовал 2-мерный массив в PHP:

$nodelist = array();
$nodelist['Web / Smartphones'] = array();
$nodelist['Web / Smartphones']['Subitem1'] = 'http://..';
$nodelist['Web / Smartphones']['Subitem2'] = 'http://..';
$nodelist['Web / Smartphones']['Subitem3'] = 'http://..';
$nodelist['Brothers'] = array();
$nodelist['Brothers']['Subitem1'] = 'http://..';
$nodelist['Brothers']['Subitem2'] = 'http://..';
$nodelist['Brothers']['Subitem3'] = 'http://..';

Используя это, вы можете просмотреть их в Smarty с помощью:

{foreach from=$nodelist item=nodes key=menutext}
  <div class="sbi_panel" data-bg="images/3.jpg">
    <a href="#" class="sbi_label">{$menutext}</a>
    <div class="sbi_content">
      <ul>
      {foreach from=$nodes item=url key=menutext2}
        <li><a href="{$url}">{$menutext2}</a></li>
      {/foreach}
      </ul>
    </div>
  </div>
{/foreach}
...