如何在以下代码中设置条件以在分页中标记当前页面?
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 代表当前页,这会将当前页码设置为活动类,而其他页面不包含该类
【讨论】:
以上是关于如何在以下代码中设置条件以在分页中标记当前页面?的主要内容,如果未能解决你的问题,请参考以下文章