如何在以下代码中设置条件以在分页中标记当前页面?

Posted

技术标签:

【中文标题】如何在以下代码中设置条件以在分页中标记当前页面?【英文标题】:How to set condition in following code for marking current page in pagination? 【发布时间】:2017-09-27 04:41:14 【问题描述】:

我正在尝试为 php-mysql 分页设置条件,以便它可以将当前页面“li”更改为“li class="active"”标记当前选择的页面。我是 php 新手,正在寻找这样的分页教程,但没有运气。

到目前为止,我已经完成了工作但无法标记所选页面的工作。这里 $id 用于检测当前页面 id。如何设置 if 条件(或其他)以便我可以在分页中标记当前页面项?非常感谢您帮助我。

   <ul class="pagination">
     <?php if($id > 1) ?> <li><a href="?id=<?php echo ($id-1) ?>">Previous</a></li><?php ?>
     <?php
     for($i=1;$i <= $page;$i++)
     ?>

     <?php
     if ($id>1)
      ?>
         <li class="active"><a href="?id=<?php echo $i ?>"><?php echo $i;?></a></li>
    <?php 
     ?>
    <!--     <li><a  href="?id=<?php echo $i ?>"><?php echo $i;?></a></li>  -->
      <?php
     
      ?>
    <?php if($id!=$page)
    //3!=4
    ?> 
      <li><a href="?id=<?php echo ($id+1); ?>">Next</a></li>
    <?php ?>
 </ul>

【问题讨论】:

据我所知,这里不涉及jquery、css或mysql。 这里我们需要更多细节。首先,不清楚$page 是什么。是当前页还是页数?其次$id是什么?最后,您是说您只希望 当前 页面处于活动状态吗? 先生,这里给你更多,$id用于获取url,如$start=0; $limit=2;$total=mysqli_num_rows($t);if(isset($_GET['id'])) $id=$_GET['id']; $start=($id-1)*$limit; //$start=2*1; //$start=2; 其他 $id=1; $page=ceil($total/$limit); 你看我的回答了吗? 我刚刚登录,正在查看,先生,感谢您的回复并为我花费了宝贵的时间。 【参考方案1】:

假设$id 是当前页码,而$page页数,您只需在循环中执行以下操作来突出显示一个:

if($i==$id) // highlight else // don’t highlight

您的主要错误是您没有测试是否$i==$id,并且您没有替代的未突出显示的版本。

我真的认为您应该通过将逻辑与 html 分开来简化代码。否则它会变得非常不可读,并且很难管理。

我冒昧地这样做了。这样你就可以看到逻辑在哪里进行了艰苦的工作,你只需要在 HTML 中打印结果。

<?php
    $id=3;  //  test value
    $page=20;   //  test value

    $li=array();    //  temporary array for convenience
    $template='<li%s><a href="?id=%s">%s</a></li>';
    if($id>1) $li[]=sprintf($template,'',$id-1,'Previous');
    for($i=1;$i<=$page;$i++) 
        if($i==$id) $li[]=sprintf($template,' class="active"',$i,$i);   //  Current
        else $li[]=sprintf($template,'',$i,$i);
    
    if($id<$page) $li[]=sprintf($template,'',$id+1,'Next');
    $li=implode('',$li); // convert to string for printing
?>
<ul class="pagination">
<?php print $li; ?>
</ul>

您还将看到两种使事情变得更容易的技术:

我使用数组作为临时容器。以这种方式添加项目然后将其添加到 implode 到字符串中会更容易 sprintf 让定义模板字符串变得更容易,让您可以更轻松地管理 HTML 组件,并在时机成熟时填补空白。

【讨论】:

@Mango,效果很好。我正在研究您的代码以便更好地理解和学习。我在这里得到的两种解决方案都有效。希望这对其他人也有帮助。【参考方案2】:

你可以改变你的 for 循环

 <?php
     for($i=1;$i <= $page;$i++)
     ?>

     <?php
     if ($id>1)
      ?>
         <li class="active"><a href="?id=<?php echo $i ?>"><?php echo $i;?></a></li>
    <?php 
     ?>
    <!--     <li><a  href="?id=<?php echo $i ?>"><?php echo $i;?></a></li>  -->
      <?php
     
      ?>

到:

<?php
for($i=1;$i <= $page;$i++)
  $class=($i==$id)? ' class="active"' : '';
  echo '<li'.$class.'><a href="?id='.$i.'">'.$i.'</a></li>';

?>

如果我正确理解了您的代码,$page 代表总页数,$id 代表当前页,这会将当前页码设置为活动类,而其他页面不包含该类

【讨论】:

以上是关于如何在以下代码中设置条件以在分页中标记当前页面?的主要内容,如果未能解决你的问题,请参考以下文章

$ _GET在分页中丢失

如何在分页中获取特定行的页码

数据表 - Jquery 在分页中的数据表中不起作用

如何在分页中查看第二页

laravel 仅在分页中显示下一个和上一个链接

如何使用 Laravel 4 在分页中传递额外的参数?