利用Foreach生成子菜单

时间:2015-05-06 04:57:56

标签: php mysql pdo

我正在处理两个相互作用的函数,此时我正在尝试修复它的子菜单部分。

我的菜单是使用

生成的
public function CreateNavigation() {
            global $db;
            $query = <<<SQL
            SELECT id,name
            FROM pages
            WHERE enabled = :enabled
            AND main = :main
SQL;
            $resource = $db->sitedb->prepare( $query );
            $resource->execute( array (
            ':enabled'  =>  1,
            ':main'     =>  1,
            ));
                foreach($resource as $menu){
                    $this->parentid = $menu['id'];
                    echo "<li><a href='viewPage.php?id=".$menu['id']."'>".$menu['name']."</a>
                    ".self::GetSublinks()."</li>";
                }

    }

然后GetSublinks接管确定菜单的下拉列表

    public function GetSublinks() {
        global $db;
        $query = <<<SQL
        SELECT id,name
        FROM pages
        WHERE parentid = :parentid
        AND enabled = :enabled
SQL;
        $resource = $db->sitedb->prepare( $query );
        $resource->execute( array (
        ':parentid' => $this->parentid,
        ':enabled'  => 1,
        ));
        $row_count = $resource->rowCount();
        if($row_count >= 1) {
            return "<ul>";
            foreach($resource as $row){
                return "<li><a href='viewpage.php?id=".$row['id'].">".$row['name']."</a></li>"
            }
            return "</ul>";
        }
    }

现在主菜单本身效果很好,即使子链接在某种程度上也很有效。他们检查以确保并修改主链接以显示它有子项(如果有),但我遇到的问题是在子项内它只显示最后一个链接,所以我不能有多个下拉列表因为这。 我也尝试在子链接中改变我的foreach

while($row = $resource->fetch(PDO::FETCH_ASSOC))

无济于事。我的菜单在没有下拉列表的情况下工作正常,但下拉列表很适合添加。

var_dump($ resource)结果:

object(PDOStatement)#7 (1) { ["queryString"]=> string(86) " SELECT id,name FROM pages WHERE parentid = :parentid AND enabled = :enabled" } object(PDOStatement)#7 (1) { ["queryString"]=> string(86) " SELECT id,name FROM pages WHERE parentid = :parentid AND enabled = :enabled" } 

var_dump($ row)结果:

array(2) { ["id"]=> string(1) "2" ["name"]=> string(10) "Create New" } array(2) { ["id"]=> string(1) "3" ["name"]=> string(14) "Delete Listing" } 

2 个答案:

答案 0 :(得分:3)

我认为你的字符串连接和返回值是错误的。应该是这样的:

    if($row_count >= 1) {
        $subMenu = "";
        $subMenu .= "<ul>";
        foreach($resource as $row){
            $subMenu .= "<li><a href='viewpage.php?id=".$row['id'].">".$row['name']."</a></li>"
        }
        $subMenu .= "</ul>";
        return $subMenu;
    }

你应该保持连接,最后只返回子菜单。

答案 1 :(得分:1)

当您的代码到达

return "<ul>";

它会退出函数并返回<ul>所以它甚至不会来到foreach循环所以你需要连接字符串而不是返回它

  

return ¶如果在函数内调用,则return语句会立即结束当前函数的执行,并将其参数作为函数调用的值返回。 return也结束了eval()语句或脚本文件的执行。

if($row_count >= 1) {
       $sub_menu = "<ul>";
       foreach($resource as $row){
            $sub_menu .= "<li><a href='viewpage.php?id=".$row['id'].">".$row['name']."</a></li>"
        }
         return $sub_menu ."</ul>";
  }