2012-02-26 121 views
1

我想按类别组织这些链接;我尝试了一些东西,但无法正常工作。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> 
+1

我不知道PHP,但......你不能遍历'$ mainResolutions' 3次,过滤器由不同'每次category'?假设你不能以更方便的方式组织输入数据... – DNA 2012-02-26 19:05:30

回答

1

请将您的数据转换成单独的阵列在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->分配( 'mainResolutions',$ MainResolutions);

那么你的Smarty的可以使用的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

,让你有两个宗派阵列

像这样

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

然后依次通过他们的个人

我建议排序在你的mysql中的链接选择或在PHP对它们进行排序或者如果已经有财产,则可以评估以决定何时使用if语句来创建新集合

如果y你可以告诉我什么数组看起来之前,你输出它smarty我可以帮助ifs