0

我有一个包含 21 个主要项目的菜单,其中大多数都有自己的子项目。我希望能够只显示其中的第一个“16” -$menu_number['VALUE']在数据库中包含这个值,所以只有前 16 个会正常显示,其余的应该在第 16 个之后的“更多”项下可用主要项目,其中将包含其余项目及其子项目。

现在是:

服务 > 服务 1、服务 2

投资组合 > 投资组合 1、投资组合 2

......

项目 > 项目 1、项目 2、项目 3

关于我们 > 分项一、分项二

联系方式 > 子项 1、子项 2

它应该是这样的:

服务 > 服务 1、服务 2

投资组合 > 投资组合 1、投资组合 2

......

项目 > 项目 1、项目 2、项目 3

更多 > 关于我们 ( > sub-item1, sub-item2), 联系方式 ( > sub-item1, sub-item2)

这是当前代码:

$menu_number = mysql_fetch_array($menu_number, MYSQL_ASSOC);
echo $menu_number['VALUE'];

$counter = 0;
 $sql = "SELECT * FROM $tablename WHERE `Parent` = '0' AND Type LIKE 'top' ORDER BY `Order` ASC";
    $result = mysql_query($sql) or die ("Error: Query Failed! " .mysql_error());
    $output = "<nav><ul>";
    while ($rs = mysql_fetch_array($result)) {
        $rs['Link'] = preg_replace('/\|.*$/','',$rs['Link']);
        $output .= "<li class='menu_top' id='".$rs['ID']."'><a href='".$rs['Link']."'>".$rs['Name']."</a>".++$counter;
        $sql2 = "SELECT * FROM $tablename WHERE `Parent` = '".$rs['ID']."' ORDER BY `Order` ASC";
        $result2 = mysql_query($sql2) or die ("Error: Query Failed! " .mysql_error());
        if (mysql_num_rows($result2) != 0) {
          $output .= "<ul class='menu_sublinks' id='".$rs['ID']."'>";
          while ($rs2 = mysql_fetch_array($result2)){
          $rs2['Link'] = preg_replace('/\|.*$/','',$rs2['Link']);
             $output .= "<li class='menu_sublink' id='".$rs['ID']."'><a href='".$rs2['Link']."'>".$rs2['Name']."</a></li>";
          }
          $output .= "</ul></li>";
       }
    }
    $output .="</ul></nav";

我已经有一个计数器$counter,现在我需要找到一种方法来添加一个<li>More</li>和一个新的<ul>内部,包含 17...21 <li>..

我希望我解释得足够好,我试过自己这样做,但我有点困惑..谢谢你的帮助..

4

2 回答 2

0

这很容易,只需在第一个结尾附近添加另一个 while 循环..

if ( $counter >= 17 ) {
    $output .= '<ul>';
    while ($rs2 = mysql_fetch_array($result)) {
        /* Add li's of id's > 17 here... */
    }
    $output .= '<ul>';
}
$output .= "</ul></li>";

内部的 while 将简单地从最后拉出结果。

此外。尝试mysqli_*尽快迁移到mysql_*已弃用的函数,并将在适当的时候从 php.ini 中删除。

附言。您缺少</nav代码末尾的右括号 ..

另一个ps。考虑切换到 _fetch_object 而不是数组,然后使用$rs->Link$rs->ID。恕我直言,这比数组引起的括号混乱更具可读性。

于 2013-07-01T16:25:20.630 回答
0
while ($rs = mysql_fetch_array($result)) {
  if (counter == 16)
  {
     echo "<li>more...</li></ul><ul>";

     // Other existing code in the while loop goes here.
  }
}

这将在第 17 项的迭代中添加代码,这样会更好,因为如果没有更多,您就不想添加“更多”。

但是,虽然在 PHP 中添加此代码相当容易,但我宁愿在 Javascript 中进行,因为 Javascript 还必须处理可见项的切换。因此,如果没有 Javascript,最好只有一个长列表而不是一个短列表,一个more-list 然后什么都没有......

于 2013-07-01T16:25:39.130 回答