在Smarty中组织链接

时间:2012-02-26 18:44:16

标签: php smarty

我想按类别组织这些链接;我尝试了一些东西,但它无法正常工作。

{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 个答案:

答案 0 :(得分:1)

将您的数据分成不在Smarty中的PHP中的单独数组,然后您可以编写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-&gt; 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而不是部分,你可以更简单地做到这一点。

答案 1 :(得分:0)

我建议你在mysql中对链接进行排序选择或在php中对它们进行排序,这样你就有了两个宗派数组

类似这样的事情

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

然后单独循环播放

或者如果已经存在属性,您可以评估以决定何时使用if语句创建新集合

如果您可以在将数组输出到smarty之前向我展示数组的样子,我可以帮助ifs

答案 2 :(得分:0)

将您的业务逻辑与表示层分开。
在您的情况下,任务的解决方案属于业务逻辑。

阅读这篇文章:http://www.smarty.net/best_practices