【问题标题】:change recursive function from Php to smarty?将递归函数从 PHP 更改为 smarty?
【发布时间】:2013-02-08 12:57:08
【问题描述】:

我的问题 我有无穷无尽的菜单 代码

        $result=db::query_tpv("SELECT * FROM  tpv_link");
while($row = db::fetch_array($result,'assoc'))
 {

$menu[$row['parent_id']][$row['id_link']] = $row['name_link'];

}
function make_menu($parent_id)
{global $menu;if (!isset($menu[$parent_id])) {return;}
$nodes = $menu[$parent_id];
echo '<ul>';
foreach($nodes as $menu_id => $menu_name)
{
echo '<li>'.$menu_name ;
make_menu($menu_id) ;
echo '</li>';
}
echo '</ul>';
}

这个 {0|make_menu} 也可以在 samrty 中工作 ,但我想取消这个函数并在 smarty 中更改为这个(定义 $menu)

{function name=menu level=0}
        <ul>
            {foreach $data as $items}
                <li>
                    <a href="{$items.url}">
                        {$items.title}
                    </a>
                    {if is_array($items.submenu)}
                        {menu data=$items.submenu level=$level+1}
                    {/if}
                </li>
            {/foreach}
        </ul>
    {/function}
{menu data=$menuItems}

在这个how to foreach an array variable created with recursive function in Smarty 但它不起作用.....

【问题讨论】:

  • “不工作”是什么意思?
  • 我的意思不是什么都没有(任何结果)
  • 请检查我的代码和数组
  • 我不知道 smarty,但是函数从哪里得到$data?我假设它没有在全局范围内定义,并且您正在尝试遍历未设置的内容。您应该使用error_reporting(-1) 来查看您的代码产生的任何通知或警告。
  • 谢谢我现在去看看

标签: function recursion smarty3


【解决方案1】:

您好,我在 3 天后找到解决方案

这里

------------首先你查询你的表---------- 例如:

    $result=db::query_tpv("SELECT * FROM  tpv_link");
  while($row = db::fetch_array($result,'assoc'))
 {

 $menu[]=$row ;
 }

------------Secound 使用此函数(用于制作您的 pyrimd 数组)---------- ------------ 注意更改id,parentid----------

   function buildTree(array $elements, $parentId = 0) {
$branch = array();

foreach ($elements as $element) {
    if ($element['parent_id'] == $parentId) {
        $children = buildTree($elements, $element['id_link']);
        if ($children) {
            $element['children'] = $children;
        }
        $branch[] = $element;
    }
}

return $branch;
}

--------------------Smarty 模板之前--------

$tree = buildTree($menu);//$menu array all data From Query
$smarty->assign('menu',$tree);

------------------在 smarty 模板中--------------

   {function name=menu level=0}
        <ul>
            {foreach $data as $items}
                <li>
                    <a href="{$items.url}">
                        {$items.name_link}
                    </a>
                    {if $items.children}
                        {menu data=$items.children level=$level+1}
                    {/if}
                </li>
            {/foreach}
        </ul>
    {/function}


    {menu data=$menu}

【讨论】:

    猜你喜欢
    • 2019-03-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2013-04-15
    相关资源
    最近更新 更多