PHP计数然后在第16位之后添加内容



我有一个包含21个主项的菜单,其中大多数都有自己的子项。我希望能够只显示它们中的前16个-$menu_number['VALUE']在数据库中包含此值,因此正常情况下只显示前16个,其余的应该在第16个主项之后的"更多"项下可用,该项将包含其余的项及其子项。

现在是:

主页

服务>服务1,服务2

投资组合>投资组合1,投资组合2

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

关于我们>子项1,子项2

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

它应该是这样的:

主页

服务>服务1,服务2

投资组合>投资组合1,投资组合2

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

更多>关于我们(>子项1,子项2),联系方式(>子项目1,子项目2)

这是当前代码:

$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>。。

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

这很容易,只需在第一个循环的末尾添加另一个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中删除。

ps。代码末尾缺少</nav的右括号。。

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

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列表,然后什么都没有。。。

相关内容

最新更新