利用 Foreach 生成子菜单
Utilizing Foreach to generate a submenu
我正在处理两个相互交互的功能,此时我正在尝试修复它的子菜单部分。
我的菜单是使用
生成的
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>";
}
}
现在主菜单本身很好用,甚至子link在一定程度上也很好用。他们检查以确保并修改主要 link 以显示它有 children 如果有,但我 运行 进入问题的地方是 children 它只会显示link 的最后一个,因此我不能有超过一个下拉列表。
我还尝试将 sublinks 中的 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" }
我认为您的字符串连接和 returning 值是错误的。它应该像:
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;
}
你应该继续串联,最后只有 return 个子菜单。
当您的代码达到
return "<ul>";
它会退出函数,return <ul>
所以它甚至不会进入 foreach 循环所以你需要连接字符串而不是 return 它
return ¶
If called from within a function, the return statement immediately ends execution of the current function, and returns its argument as the value of the function call. return also ends the execution of an eval() statement or script file.
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>";
}
我正在处理两个相互交互的功能,此时我正在尝试修复它的子菜单部分。
我的菜单是使用
生成的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>";
}
}
现在主菜单本身很好用,甚至子link在一定程度上也很好用。他们检查以确保并修改主要 link 以显示它有 children 如果有,但我 运行 进入问题的地方是 children 它只会显示link 的最后一个,因此我不能有超过一个下拉列表。 我还尝试将 sublinks 中的 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" }
我认为您的字符串连接和 returning 值是错误的。它应该像:
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;
}
你应该继续串联,最后只有 return 个子菜单。
当您的代码达到
return "<ul>";
它会退出函数,return <ul>
所以它甚至不会进入 foreach 循环所以你需要连接字符串而不是 return 它
return ¶
If called from within a function, the return statement immediately ends execution of the current function, and returns its argument as the value of the function call. return also ends the execution of an eval() statement or script file.
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>";
}