Skip to content

Commit 2236975

Browse files
authored
Fix #103: Fix LinkPager::getPageRange when maxButtons assign with 2
1 parent bd19a9d commit 2236975

File tree

3 files changed

+97
-1
lines changed

3 files changed

+97
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Yii Framework 2 bootstrap5 extension Change Log
55
------------------------
66

77
- Bug #88: Fix ButtonDropdown JS error (stevekr, simialbi)
8+
- Bug #103: Fix `LinkPager::getPageRange` when `maxButtons` is 2 (max-s-lab)
89

910
2.0.50 April 10, 2025
1011
---------------------

src/LinkPager.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,9 @@ protected function getPageRange(): array
323323
$currentPage = $this->pagination->getPage();
324324
$pageCount = $this->pagination->getPageCount();
325325

326-
$beginPage = max(0, $currentPage - (int) ($this->maxButtonCount / 2));
326+
$beginPageOffset = $this->maxButtonCount > 2 ? (int) ($this->maxButtonCount / 2) : 0;
327+
$beginPage = max(0, $currentPage - $beginPageOffset);
328+
327329
if (($endPage = $beginPage + $this->maxButtonCount - 1) >= $pageCount) {
328330
$endPage = $pageCount - 1;
329331
$beginPage = max(0, $endPage - $this->maxButtonCount + 1);

tests/LinkPagerTest.php

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,99 @@ public function testLinkWrapOptions()
115115
);
116116
}
117117

118+
public function testWithTwoButtons()
119+
{
120+
$output = LinkPager::widget([
121+
'pagination' => $this->getPagination(0),
122+
'maxButtonCount' => 2,
123+
]);
124+
125+
$this->assertContainsWithoutLE(
126+
<<<HTML
127+
<ul class="pagination"><li class="page-item prev disabled"><a class="page-link" href="/?r=test&amp;page=1" data-page="0" tabindex="-1"><span aria-hidden="true">&laquo;</span></a></li>
128+
<li class="page-item active" aria-current="page"><a class="page-link" href="/?r=test&amp;page=1" data-page="0">1</a></li>
129+
<li class="page-item"><a class="page-link" href="/?r=test&amp;page=2" data-page="1">2</a></li>
130+
<li class="page-item next"><a class="page-link" href="/?r=test&amp;page=2" data-page="1"><span aria-hidden="true">&raquo;</span></a></li></ul>
131+
HTML,
132+
$output,
133+
);
134+
135+
$output = LinkPager::widget([
136+
'pagination' => $this->getPagination(1),
137+
'maxButtonCount' => 2,
138+
]);
139+
140+
$this->assertContainsWithoutLE(
141+
<<<HTML
142+
<ul class="pagination"><li class="page-item prev"><a class="page-link" href="/?r=test&amp;page=1" data-page="0"><span aria-hidden="true">&laquo;</span></a></li>
143+
<li class="page-item active" aria-current="page"><a class="page-link" href="/?r=test&amp;page=2" data-page="1">2</a></li>
144+
<li class="page-item"><a class="page-link" href="/?r=test&amp;page=3" data-page="2">3</a></li>
145+
<li class="page-item next"><a class="page-link" href="/?r=test&amp;page=3" data-page="2"><span aria-hidden="true">&raquo;</span></a></li></ul>
146+
HTML,
147+
$output,
148+
);
149+
}
150+
151+
public function testWithOneButton()
152+
{
153+
$output = LinkPager::widget([
154+
'pagination' => $this->getPagination(0),
155+
'maxButtonCount' => 1,
156+
]);
157+
158+
$this->assertContainsWithoutLE(
159+
<<<HTML
160+
<ul class="pagination"><li class="page-item prev disabled"><a class="page-link" href="/?r=test&amp;page=1" data-page="0" tabindex="-1"><span aria-hidden="true">&laquo;</span></a></li>
161+
<li class="page-item active" aria-current="page"><a class="page-link" href="/?r=test&amp;page=1" data-page="0">1</a></li>
162+
<li class="page-item next"><a class="page-link" href="/?r=test&amp;page=2" data-page="1"><span aria-hidden="true">&raquo;</span></a></li></ul>
163+
HTML,
164+
$output,
165+
);
166+
167+
$output = LinkPager::widget([
168+
'pagination' => $this->getPagination(1),
169+
'maxButtonCount' => 1,
170+
]);
171+
172+
$this->assertContainsWithoutLE(
173+
<<<HTML
174+
<ul class="pagination"><li class="page-item prev"><a class="page-link" href="/?r=test&amp;page=1" data-page="0"><span aria-hidden="true">&laquo;</span></a></li>
175+
<li class="page-item active" aria-current="page"><a class="page-link" href="/?r=test&amp;page=2" data-page="1">2</a></li>
176+
<li class="page-item next"><a class="page-link" href="/?r=test&amp;page=3" data-page="2"><span aria-hidden="true">&raquo;</span></a></li></ul>
177+
HTML,
178+
$output,
179+
);
180+
}
181+
182+
public function testWithNoButtons()
183+
{
184+
$output = LinkPager::widget([
185+
'pagination' => $this->getPagination(0),
186+
'maxButtonCount' => 0,
187+
]);
188+
189+
$this->assertContainsWithoutLE(
190+
<<<HTML
191+
<ul class="pagination"><li class="page-item prev disabled"><a class="page-link" href="/?r=test&amp;page=1" data-page="0" tabindex="-1"><span aria-hidden="true">&laquo;</span></a></li>
192+
<li class="page-item next"><a class="page-link" href="/?r=test&amp;page=2" data-page="1"><span aria-hidden="true">&raquo;</span></a></li></ul>
193+
HTML,
194+
$output,
195+
);
196+
197+
$output = LinkPager::widget([
198+
'pagination' => $this->getPagination(1),
199+
'maxButtonCount' => 0,
200+
]);
201+
202+
$this->assertContainsWithoutLE(
203+
<<<HTML
204+
<ul class="pagination"><li class="page-item prev"><a class="page-link" href="/?r=test&amp;page=1" data-page="0"><span aria-hidden="true">&laquo;</span></a></li>
205+
<li class="page-item next"><a class="page-link" href="/?r=test&amp;page=3" data-page="2"><span aria-hidden="true">&raquo;</span></a></li></ul>
206+
HTML,
207+
$output,
208+
);
209+
}
210+
118211
/**
119212
* @see https://github.com/yiisoft/yii2/issues/15536
120213
*/

0 commit comments

Comments
 (0)