我正在尝试让CakePHP的分页助手与bootstrap很好地配合。也就是说,我希望我的分页元素看起来像引导程序,但是由CakePHP生成。
目前我的观点页上有这个:
<?php
echo $this->Paginator->numbers(array(
'before' => '<div class="pagination"><ul>',
'separator' => '',
'currentClass' => 'active',
'tag' => 'li',
'after' => '</ul></div>'
));
?>
产生以下标记:
<div class="pagination">
<ul>
<li class="active">1</li>
<li><a href="/test/posts/page:2">2</a></li>
<li><a href="/test/posts/page:3">3</a></li>
</ul>
</div>
问题是,因为活动页面(在本例中为1)在<a>
标记中没有<li>
元素,所以它无法在页面上正确显示(请参阅此处:{{ 3}})。
我似乎无法在Cookbook上找到任何可以解决这个问题的事情。
这可以解决吗?
答案 0 :(得分:60)
我使用了boot php所需的cake php html的泛型函数。
Gist代码:https://gist.github.com/jruzafa/5302941
<div class="pagination pagination-large">
<ul class="pagination">
<?php
echo $this->Paginator->prev(__('prev'), array('tag' => 'li'), null, array('tag' => 'li','class' => 'disabled','disabledTag' => 'a'));
echo $this->Paginator->numbers(array('separator' => '','currentTag' => 'a', 'currentClass' => 'active','tag' => 'li','first' => 1));
echo $this->Paginator->next(__('next'), array('tag' => 'li','currentClass' => 'disabled'), null, array('tag' => 'li','class' => 'disabled','disabledTag' => 'a'));
?>
</ul>
</div>
答案 1 :(得分:7)
实际上在the "Creating page number links" section of the "Paginator" documentation中明确提到了这一点:
currentTag
标记用于当前页码,默认为null。 这允许您生成例如Twitter Bootstrap之类的链接 将当前页码包含在额外的“a”或“span”标记中。
在您的情况下,您需要使用'currentTag' => 'a'
。但是,请记住,此选项已添加到CakePHP 2.3中,因此如果您使用的是旧版本,则无法使用。
答案 2 :(得分:6)
您真正需要做的就是为当前和禁用的项目添加一个CSS类来匹配。这是我用于我的项目的一个(它基本上是从bootstrap CSS文件中复制和粘贴的)。
.pagination .current,
.pagination .disabled {
float: left;
padding: 0 14px;
color: #999;
cursor: default;
line-height: 34px;
text-decoration: none;
border: 1px solid #DDD;
border-left-width: 0;
}
这使它具有与a
标签相同的样式。
答案 3 :(得分:2)
我能得到的最好:
<强> PHP:强>
<div class="paging btn-group page-buttons">
<?php
echo $this->Paginator->prev('< ' . __d('users', 'previous'), array('class' => 'btn btn-default prev', 'tag' => 'button'), null, array('class' => 'btn btn-default prev disabled', 'tag' => 'button'));
echo $this->Paginator->numbers(array('separator' => '', 'class' => 'btn btn-default', 'currentClass' => 'disabled', 'tag' => 'button'));
echo $this->Paginator->next(__d('users', 'next') . ' >', array('class' => 'btn btn-default next', 'tag' => 'button'), null, array('class' => 'btn btn-default next disabled', 'tag' => 'button'));
?>
</div>
<强> CSS:强>
button:hover > a {
text-decoration: none;
}
<强>结果:强>
.paging {margin: 10px;}
button:hover > a {text-decoration: none;}
&#13;
<link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet"/>
<link href="http://getbootstrap.com/dist/css/bootstrap-theme.min.css" rel="stylesheet"/>
<div class="paging btn-group page-buttons">
<button class="btn btn-default prev disabled">< anterior</button>
<button class="disabled btn btn-default">1</button>
<button class="btn btn-default"><a href="/cakephp/users/index/page:2">2</a></button>
<button class="btn btn-default next"><a href="/cakephp/users/index/page:2" rel="next">próximo ></a></button>
</div>
&#13;
答案 4 :(得分:2)
您需要在活动页面的“li”标签之间添加锚标记,请尝试以下代码:
<nav>
<ul class="pagination">
<?php
echo $this->Paginator->prev('«', array('tag' => 'li', 'escape' => false), '<a href="#">«</a>', array('class' => 'prev disabled', 'tag' => 'li', 'escape' => false));
$numbers = $this->Paginator->numbers(array('separator' => '', 'tag' => 'li', 'currentLink' => true, 'currentClass' => 'active', 'currentTag' => 'a'));
$numbers = preg_replace("#\<li class=\"active\"\>([0-9]+)\<\/li\>#", "<li class=\"active\"><a href=''>$1</a></li>",$numbers);
echo $numbers;
echo $this->Paginator->next('»', array('tag' => 'li', 'escape' => false), '<a href="#">»</a>', array('class' => 'prev disabled', 'tag' => 'li', 'escape' => false));
?>
</ul>
</nav>
答案 5 :(得分:1)
如果您使用的是Twitter Bootstrap 3.0和CakePHP 2.0或2.1:
,请尝试此操作css (在你的css中某处,而不是在bootstrap css中!)
ul.pagination li.active {
position: relative;
float: left;
padding: 6px 12px;
margin-left: -1px;
line-height: 1.428571429;
text-decoration: none;
background-color: #fff;
border: 1px solid #ddd;
}
CakePHP查看 (您要在其中显示分页栏)
<ul class="pagination">
<?php
echo ($this->Paginator->hasPrev()) ? $this->Paginator->prev('«', array('tag' => 'li'), null, null) : '<li class="disabled"><a href="#">«</a></li>';
echo $this->Paginator->numbers(array('separator' => false, 'tag' => 'li'));
echo ($this->Paginator->hasNext()) ? $this->Paginator->next('»', array('tag' => 'li'), null, null) : '<li class="disabled"><a href="#">»</a></li>';
?>
</ul>
答案 6 :(得分:1)
对于具有字体真棒和完整分页的bootstrap 2,您可以使用:
为你的css或更少添加一点hack
<div class="pagination">
<ul>
<?php
## PAGINATION
echo $this->Paginator->first('<i class="fa fa-angle-double-left"></i>', ['escape' => false, 'tag' => 'li']);
//
//
echo $this->Paginator->prev('<span><i class="fa fa-angle-left"></i></span>', [
'class' => 'prev enabled',
'tag' => 'li',
'escape' => false,
], null, [
'class' => 'prev disabled',
'tag' => 'li',
'escape' => false,
]);
echo $this->Paginator->numbers(
[
'separator' => '',
'tag' => 'li',
'modulus' => 20,
'escape' => false,
'currentTag' => 'span',
'currentClass' => 'active',
]);
//
echo $this->Paginator->next('<span><i class="fa fa-angle-right"></i></span>', [
'class' => 'next enabled',
'tag' => 'li',
'escape' => false,
], null, [
'class' => 'next disabled',
'tag' => 'li',
'escape' => false,
]);
echo $this->Paginator->last('<i class="fa fa-angle-double-right"></i>', ['escape' => false, 'tag' => 'li']);
?>
</ul>
<div class="pull-right paginationCounter">
<?php
echo $this->Paginator->counter(
[
'class' => 'pull-right',
'format' => '{:page} / {:pages} pages, {:count} results',
]);
?>
</div>
</div>
/* Pagination bootstrap 2 add */
.pagination ul > li.active{
float: left;
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
-moz-border-right-colors: none;
-moz-border-top-colors: none;
background-color: #fff;
border-color: #ddd;
border-image: none;
border-style: solid;
border-width: 1px 1px 1px 0;
line-height: 20px;
padding: 4px 12px;
text-decoration: none;
cursor: default;
}
.pagination ul > li a[rel='first'],
.pagination ul > li a[rel='last'],
.pagination ul > li.prev a,
.pagination ul > li.next a {
height: 17px;
padding-top: 7px;
}
答案 7 :(得分:0)
if ($this->Paginator->hasPage(null, 2)) {
echo '<tfoot>';
echo '<tr>';
echo '<td colspan="7" class="text-right">';
echo ' <ul class="pagination pagination-right">';
echo $this->Paginator->first('<span class="glyphicon glyphicon-fast-backward"></span> First', array('escape' => false, 'tag' => 'li'), null, array('escape' => false, 'tag' => 'li', 'class' => 'disabled', 'disabledTag' => 'a'));
echo $this->Paginator->prev('<span class="glyphicon glyphicon-step-backward"></span> Prev', array('escape' => false, 'tag' => 'li'), null, array('escape' => false, 'tag' => 'li', 'class' => 'disabled', 'disabledTag' => 'a'));
echo $this->Paginator->numbers(array(
'currentClass' => 'active',
'currentTag' => 'a',
'tag' => 'li',
'separator' => '',
));
echo $this->Paginator->next('Next <span class="glyphicon glyphicon-step-forward"></span>', array('escape' => false, 'tag' => 'li', 'currentClass' => 'disabled'), null, array('escape' => false, 'tag' => 'li', 'class' => 'disabled', 'disabledTag' => 'a'));
echo $this->Paginator->last('Last <span class="glyphicon glyphicon-fast-forward"></span>', array('escape' => false, 'tag' => 'li', 'currentClass' => 'disabled'), null, array('escape' => false, 'tag' => 'li', 'class' => 'disabled', 'disabledTag' => 'a'));
echo ' </ul>';
echo '<p>'.$this->Paginator->counter(array('format' => 'Page {:page} of {:pages}, showing {:current} records out of {:count} total.')).'</p>';
echo '</td>';
echo '</tr>';
echo '</tfoot>';
}
答案 8 :(得分:0)
你可以在没有任何css的情况下实现这一点:
<?php
echo $this->Paginator->numbers(array(
'before' => '<ul class="pagination">',
'separator' => '',
'currentClass' => 'active',
'currentTag' => 'a',
'tag' => 'li',
'after' => '</ul>'
));
?>
答案 9 :(得分:0)
#pagination > li.current {
z-index: 2;
color: #ffffff;
position: relative;
float: left;
padding: 6px 12px;
line-height: 1.428571429;
text-decoration: none;
border: 1px solid #dddddd;
margin-left: 0;
color: #999999;
z-index: 2;
color: #ffffff;
cursor: default;
background-color: #428BCA;
border-color: #428BCA;
}
#pagination > li.prev.disabled,#pagination > li.next.disabled {
position: relative;
float: left;
padding: 6px 12px;
line-height: 1.428571429;
text-decoration: none;
border: 1px solid #dddddd;
margin-left: 0;
color: #999999;
cursor: not-allowed;
background-color: #ffffff;
border-color: #dddddd;
}
.pagination > li > a{
color: #428BCA;
}
答案 10 :(得分:0)
这么多答案,但非句柄省略号。您可以在下面找到完整版本,无需自定义CSS。
CakePHP v2,Bootstrap v3
<ul class="pagination">
<li><?php echo $this->Paginator->prev('Previous', array('escape' => false, 'tag' => 'li'), null, array('escape' => false, 'tag' => 'li', 'class' => 'disabled', 'disabledTag' => 'a')); ?></li>
<li><?php echo $this->Paginator->numbers(array('separator' => '', 'currentTag' => 'a', 'currentClass' => 'active', 'tag' => 'li', 'first' => 1, 'ellipsis' => '<li class="disabled"><a>...</a></li>')); ?></li>
<li><?php echo $this->Paginator->next('Next', array('escape' => false, 'tag' => 'li', 'currentClass' => 'disabled'), null, array('escape' => false, 'tag' => 'li', 'class' => 'disabled', 'disabledTag' => 'a')); ?></li>
</ul>
结果代码:
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<ul class="pagination">
<li class="prev">
<a href="/users/page:8" rel="prev">Previous</a>
</li>
<li>
<a href="/users">1</a>
</li>
<li class="disabled">
<a>...</a>
</li>
<li>
<a href="/users/page:5">5</a>
</li>
<!-- more numbers here... -->
<li class="active">
<a>9</a>
</li>
<!-- more numbers here... -->
<li class="next">
<a href="/users/page:10" currentclass="disabled" rel="next">Next</a>
</li>
</ul>
&#13;