Laravel 4 自定义分页:转到第一页/最后一页并显示固定数量的链接

Iva*_*van 3 pagination laravel-4

我在 Laravel 4 中使用默认的 Bootstrap 滑块导航,它工作得非常好:但现在我想通过两个自定义来改进它,但我不知道如何:

1:在开头添加“转到第一页”,如果我们在第一页则禁用;最后还有一个类似的“转到最后一页”,如果我们在最后一页,则禁用(请查看与默认 Laravel 内容相比箭头如何更改!我想使用“双箭头”(« 和 »)对于“转到第一个/最后一个”,以及一个单箭头(<和>)“转到上一个/下一个:

<ul class="pagination">
    <li class="disabled"><span>&laquo;</span></li>
    <li class="disabled"><span>&lsaquo;</span></li>
    <li class="active"><span>1</span></li>
    <li><a href="http://laravel/games?page=2">2</a></li>
    <li><a href="http://laravel/games?page=3">3</a></li>
    <li><a href="http://laravel/games?page=4">4</a></li>
    <li><a href="http://laravel/games?page=5">5</a></li>
    <li><a href="http://laravel/games?page=6">6</a></li>
    <li><a href="http://laravel/games?page=7">7</a></li>
    <li><a href="http://laravel/games?page=8">8</a></li>
    <li><a href="http://laravel/games?page=9">9</a></li>
    <li><a href="http://laravel/games?page=10">10</a></li>
    <li><a href="http://laravel/games?page=2" rel="next">&rsaquo;</a></li>
    <li><a href="http://laravel/games?page=10" rel="last">&raquo;</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

2:一次显示自定义数量的链接(即 5),而不是默认的长列表:

<ul class="pagination">
    <li class="disabled"><span>&laquo;</span></li>
    <li class="disabled"><span>&lsaquo;</span></li>
    <li class="active"><span>1</span></li>
    <li><a href="http://laravel/games?page=2">2</a></li>
    <li><a href="http://laravel/games?page=3">3</a></li>
    <li><a href="http://laravel/games?page=4">4</a></li>
    <li><a href="http://laravel/games?page=5">5</a></li>
    <li><a href="http://laravel/games?page=2" rel="next">&rsaquo;</a></li>
    <li><a href="http://laravel/games?page=10" rel="last">&raquo;</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

或者

<ul class="pagination">
    <li><a href="http://laravel/games?page=1" rel="first">&laquo;</a></li>
    <li><a href="http://laravel/games?page=3" rel="prev">&lsaquo;</a></li>
    <li><a href="http://laravel/games?page=2">2</a></li>
    <li><a href="http://laravel/games?page=3">3</a></li>
    <li class="active"><span>4</span></li>
    <li><a href="http://laravel/games?page=5">5</a></li>
    <li><a href="http://laravel/games?page=6">6</a></li>
    <li><a href="http://laravel/games?page=4" rel="next">&rsaquo;</a></li>
    <li><a href="http://laravel/games?page=10" rel="last">&raquo;</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

想看图片吗?这就是各种页面的样子(这是一个基于 Bootstrap 2.3.2 构建的旧程序 PHP...我有原始代码,但不知道如何“翻译”为 Laravel OOP)

http://www.iwstudio.it/01.png

到目前为止,我制作了一个 custom.php 视图,并将'pagination' => 'pagination::slider-3'laravel/app/config/view.php 中的行更改为'pagination' => 'pagination::custom'

然后,在 custom.php 视图中,我陷入了困境:

<?php
    $presenter = new Illuminate\Pagination\BootstrapPresenter($paginator);
?>

<?php if ($paginator->getLastPage() > 1): ?>
    <ul class="pagination">

    </ul>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)

请问有什么帮助吗?

提前致谢!

Jof*_*yHS 5

干得好。

<?php 

class MyPresenter extends Illuminate\Pagination\BootstrapPresenter {

    public function render()
    {
        if ($this->currentPage == 1) {
            $content = $this->getPageRange(1, $this->currentPage + 2); 
        }
        else if ($this->currentPage >= $this->lastPage) {
            $content = $this->getPageRange($this->currentPage - 2, $this->lastPage); 
        }
        else {
            $content = $this->getPageRange($this->currentPage - 1, $this->currentPage + 1); 
        }

        return $this->getFirst().$this->getPrevious('&lsaquo;').$content.$this->getNext('&rsaquo;').$this->getLast();
    }

    public function getFirst($text = '&laquo;')
    {
        if ($this->currentPage <= 1)
        {
            return $this->getDisabledTextWrapper($text);
        }
        else
        {
            $url = $this->paginator->getUrl(1);
            return $this->getPageLinkWrapper($url, $text);
        }
    }

    public function getLast($text = '&raquo;')
    {
        if ($this->currentPage >= $this->lastPage)
        {
            return $this->getDisabledTextWrapper($text);
        }
        else
        {
            $url = $this->paginator->getUrl($this->lastPage);

            return $this->getPageLinkWrapper($url, $text);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请随意更改MyPresenter类名称,并在您的自定义视图中:

<ul class="pagination">
    <?php echo with(new MyPresenter($paginator))->render(); ?>
</ul>
Run Code Online (Sandbox Code Playgroud)

当然,这并不是很完美(如果总页数少于 3,您可能会遇到问题),但这将使您走上正确的道路。