1

我无法以正确的顺序获得输出,以便以这种格式将其对齐为apple.com/sitemap。我面临的问题是显示值时使用的标签,我无法将它放在正确的位置。

现在,输出是:

<ul class= "sitemap">

</ul></li><li><h2>Parent 1</h2><ul>
<li>Sub Cat 1</li>
<li>Sub Cat 2</li>

</ul></li><li><h2>Parent 2</h2><ul>
<li>Sub Cat3</li>
<li>Sub Cat 4</li>
</ul></li><li><h2>Parent 3</a></h2><ul>

如果您看到 ul 标记未正确关闭,因此我无法实现 CSS ..

我已将表创建为:

id | parent | name | url  

1  |  0  | Parent1 | Link
2  |  1  | Sub Cat1| Link
3  |  2  | Sub Cat2| Link
4  |  0  | Parent2 | Link

MySQL 查询以获取值:

$sql = 'SELECT parent,name, url FROM sitemap ORDER BY CASE WHEN parent =0 THEN id ELSE parent END , CASE WHEN parent =0 THEN 0 ELSE id END';

在页面上显示数据的行:

{foreach from=$sitemap item=c name=sitemap}

{ assign var="tmp" value= $c.parent  }
{ if $tmp==0}

</ul></li><li><h2><a title="{$c.name}" href="{$c.url}">{$c.name}</a></h2><ul>
{else}

<li><a title="{$c.name}" href="{$c.url}">{$c.name}</a></li>

{/if}
{/foreach}
4

1 回答 1

0

你可能正在寻找类似的东西

{foreach from=$sitemap item=c name=sitemap}
    {* open <ul> on first element, only if it is has a parent *}
    {if $smarty.foreach.sitemap.first && $c.parent}<ul>{/if}

    {if !$c.parent}
        {* if this is not the first element, close previous <ul> *}
        {if !$smarty.foreach.sitemap.first}</ul>{/if}
        {* output headline for this <ul> *}
        <h2><a title="{$c.name}" href="{$c.url}">{$c.name}</a></h2>
        {* open new <ul> *}
        <ul>
    {else}
        <li><a title="{$c.name}" href="{$c.url}">{$c.name}</a></li>
    {/if}

    {* close <ul> after last element *}
    {if $smarty.foreach.sitemap.last}</ul>{/if}
{/foreach}
于 2012-08-06T08:50:52.573 回答