Организация ссылок в Smarty - PullRequest
1 голос
/ 26 февраля 2012

Я бы хотел организовать эти ссылки по категориям; Я пробовал что-то, но это не работает должным образом.

{if $mainResolutions|@count >0}
<ul>    
    {section name=item loop=$mainResolutions}
        {if $mainResolutions[item].enabled == 1}
            {assign var='res_name' value=$mainResolutions[item].width|cat:'x'|cat:$mainResolutions[item].height}
            <li><a href="{$res_name|url:'resolution'}">{$mainResolutions[item].width}x{$mainResolutions[item].height} {$mainResolutions[item].category}</a></li>
        {/if}
    {/section}  
</ul>   
{/if}

Приведенный выше код выведет HTML следующим образом:

<ul>
     <li><a href="/800x600-wallpapers-r.html">800x600 Normal 4:3</a></li>
     <li><a href="/1024x768-wallpapers-r.html">1024x768 Normal 4:3</a></li>
     <li><a href="/1152x864-wallpapers-r.html">1152x864 Normal 4:3</a></li>
     <li><a href="/1280x960-wallpapers-r.html">1280x960 Normal 4:3</a></li>
     <li><a href="/1400x1050-wallpapers-r.html">1400x1050 Normal 4:3</a></li>
     <li><a href="/1600x1200-wallpapers-r.html">1600x1200 Normal 4:3</a></li>
     <li><a href="/1920x1440-wallpapers-r.html">1920x1440 Normal 4:3</a></li>
     <li><a href="/1280x800-wallpapers-r.html">1280x800 Wide</a></li>
     <li><a href="/1440x900-wallpapers-r.html">1440x900 Wide</a></li>
     <li><a href="/1680x1050-wallpapers-r.html">1680x1050 Wide</a></li>
     <li><a href="/1920x1200-wallpapers-r.html">1920x1200 Wide</a></li>
     <li><a href="/2560x1600-wallpapers-r.html">2560x1600 Wide</a></li>
     <li><a href="/852x480-wallpapers-r.html">852x480 HD</a></li>
     <li><a href="/1280x720-wallpapers-r.html">1280x720 HD</a></li>
     <li><a href="/1366x768-wallpapers-r.html">1366x768 HD</a></li>
     <li><a href="/1920x1080-wallpapers-r.html">1920x1080 HD</a></li>
</ul>

Пока хотелось бы следующее:

<ul>
    <li><a href="#">Normal 4:3</a>
    <ul>
        <li><a href="/800x600-wallpapers-r.html">800x600 </a></li>
        <li><a href="/1024x768-wallpapers-r.html">1024x768 </a></li>
        <li><a href="/1152x864-wallpapers-r.html">1152x864 </a></li>
        <li><a href="/1280x960-wallpapers-r.html">1280x960 </a></li>
        <li><a href="/1400x1050-wallpapers-r.html">1400x1050 </a></li>
        <li><a href="/1600x1200-wallpapers-r.html">1600x1200 </a></li>
        <li><a href="/1920x1440-wallpapers-r.html">1920x1440 </a></li>
    </ul>
    </li>
    <li><a href="#">Wide</a>
    <ul>
        <li><a href="/1280x800-wallpapers-r.html">1280x800 </a></li>
        <li><a href="/1440x900-wallpapers-r.html">1440x900 </a></li>
        <li><a href="/1680x1050-wallpapers-r.html">1680x1050 </a></li>
        <li><a href="/1920x1200-wallpapers-r.html">1920x1200 </a></li>
        <li><a href="/2560x1600-wallpapers-r.html">2560x1600 </a></li>
    </ul>
    </li>
    <li><a href="#">HD</a>
    <ul>
        <li><a href="/852x480-wallpapers-r.html">852x480 </a></li>
        <li><a href="/1280x720-wallpapers-r.html">1280x720 </a></li>
        <li><a href="/1366x768-wallpapers-r.html">1366x768 </a></li>
        <li><a href="/1920x1080-wallpapers-r.html">1920x1080 </a></li>
    </ul>
    </li>
</ul>

Ответы [ 3 ]

1 голос
/ 27 февраля 2012

Разбейте ваши данные на отдельные массивы в вашем php не в Smarty, тогда вы можете написать 3 цикла или под цикла

Попытайтесь передать ваши данные в массив, подобный этому

$MainResolutions = array('Normal 4:3' => array(item1 => array('name' =>'item1', enabled = 1, etc),
                         'Wide' => array(item1 => 'item1' etc),
                         'HD' => array(item1 => 'item1' etc));

$ Smarty-> assign ('mainResolutions', $ MainResolutions);

тогда ваш умник может использовать foreach

{foreach from=$mainResolutions item=Resolution key=SectionName}
<ul>    
    {if Resolution.enabled == 1}

        <li><a href="{$SectionName}"> 
        {$Resolutions.width}x{$Resolution.height} {$Resolution.category}</a>
        </li>
    {/if}

{/foreach}

Вы можете сделать это намного проще, используя массивы php со всей уже организованной информацией, а затем используя foreach, а не разделы.

0 голосов
/ 27 февраля 2012

Держите свою бизнес-логику отдельно от уровня представления.
В вашем случае решение задачи относится к бизнес-логике.

Читать эту статью: http://www.smarty.net/best_practices

0 голосов
/ 27 февраля 2012

Я бы предложил отсортировать ссылки в вашем MySQL, выбрать или отсортировать их в php, чтобы у вас был двухзначный массив

примерно так

array(
     "normal" => array(
        ....
        ),
    "wide" => array(
    ....
    ),
    "HD" => array(
    ...
    )
)

, а затем проходить по ним по отдельности

или если уже есть свойство, которое вы можете оценить, чтобы решить, когда создавать новый набор с инструкциями if, которые тоже будут работать

, если вы можете показать мне, как выглядит массив, прежде чем вывести егоумничать я могу помочь с ifs

...