Home  >  Article  >  Backend Development  >  Laravel framework implements pagination analysis

Laravel framework implements pagination analysis

不言
不言Original
2018-06-12 16:46:321540browse

This article mainly introduces the paging implementation method of the Laravel framework, and analyzes the core code and related principles of the Laravel framework to implement the paging function in the form of examples. Friends in need can refer to it

The examples of this article describe Laravel Framework paging implementation method. Share it with everyone for your reference, the details are as follows:

In the process of using Laravel, some functions "hard-code" the expression of the front-end page, such as the paging button!

Of course you will say that Laravel's Bootstrap style is also very beautiful, but in actual projects, page turning buttons often need to meet the needs of customers, especially when developing a Web APP that supports mobile phone adaptation. Requires custom styles.

So, when learning something, you can’t just understand it, but study its principles.

Let’s first take a look at how Laravel does paging. Where is the code to generate paging buttons?

Laravel Directory\vendor\laravel\framework\src\Illuminate\PaginationNext

Let’s first sort out the inheritance relationship of the class

PresenterContract (parent class)
BootstrapThreePresenter(subclass)<-SimpleBootstrapThreePresenter
BootstrapFourPresenter(subclass)<- SimpleBootstrapFourPresenter

Judging from the author’s naming of the class, there must be a difference. Let’s study from the code

The main difference between

BootstrapThreePresenter.php and BootstrapFourPresenter.php is in the following functions

BootstrapThreePresenter.php code:

/**
* Get HTML wrapper for an available page link.
*
* @param string $url
* @param int $page
* @param string|null $rel
* @return string
*/
protected function getAvailablePageWrapper($url, $page, $rel = null)
{
    $rel = is_null($rel) ? &#39;&#39; : &#39; rel="&#39;.$rel.&#39;"&#39;;
    return &#39;<li><a href="&#39;.htmlentities($url).&#39;" rel="external nofollow" rel="external nofollow" &#39;.$rel.&#39;>&#39;.$page.&#39;</a></li>&#39;;
}
/**
* Get HTML wrapper for disabled text.
*
* @param string $text
* @return string
*/
protected function getDisabledTextWrapper($text)
{
    return &#39;<li class="disabled"><span>&#39;.$text.&#39;</span></li>&#39;;
}
/**
* Get HTML wrapper for active text.
*
* @param string $text
* @return string
*/
protected function getActivePageWrapper($text)
{
    return &#39;<li class="active"><span>&#39;.$text.&#39;</span></li>&#39;;
}

BootstrapFourPresenter.php code:

/**
* Get HTML wrapper for an available page link.
*
* @param string $url
* @param int $page
* @param string|null $rel
* @return string
*/
protected function getAvailablePageWrapper($url, $page, $rel = null)
{
    $rel = is_null($rel) ? &#39;&#39; : &#39; rel="&#39;.$rel.&#39;"&#39;;
    return &#39;<li class="page-item"><a class="page-link" href="&#39;.htmlentities($url).&#39;" rel="external nofollow" rel="external nofollow" &#39;.$rel.&#39;>&#39;.$page.&#39;</a></li>&#39;;
}
/**
* Get HTML wrapper for disabled text.
*
* @param string $text
* @return string
*/
protected function getDisabledTextWrapper($text)
{
    return &#39;<li class="page-item disabled"><a class="page-link">&#39;.$text.&#39;</a></li>&#39;;
}
/**
* Get HTML wrapper for active text.
*
* @param string $text
* @return string
*/
protected function getActivePageWrapper($text)
{
    return &#39;<li class="page-item active"><a class="page-link">&#39;.$text.&#39;</a></li>&#39;;
}

We found that the biggest difference is that ThreePresenter is almost a "naked" HTML tag, while FourPresenter generates HTML tags with classes.

Whether it is ThreePresenter or FourPresenter, they all have the same implementation of the render() function

/**
* Convert the URL window into Bootstrap HTML.
*
* @return \Illuminate\Support\HtmlString
*/
public function render()
{
    if ($this->hasPages()) {
      return new HtmlString(sprintf(
        &#39;<ul class="pagination">%s %s %s</ul>&#39;,
        $this->getPreviousButton(),
        $this->getLinks(),
        $this->getNextButton()
      ));
    }
    return &#39;&#39;;
}

Careful readers have discovered that there are The two inherited classes are SimpleThreePresenter and SimpleFourPresenter. Since they are Simple (simple), the difference lies in their render() function

/**
* Convert the URL window into Bootstrap HTML.
*
* @return \Illuminate\Support\HtmlString
*/
public function render()
{
    if ($this->hasPages()) {
      return new HtmlString(sprintf(
        &#39;<ul class="pager">%s %s</ul>&#39;,
        $this->getPreviousButton(),
        $this->getNextButton()
      ));
    }
    return &#39;&#39;;
}

In other words, The paging buttons generated by SimpleThreePresenter and SimpleFourPresenter do not have "page numbers", only "previous page" and "next page" buttons.

The above is the entire content of this article. I hope it will be helpful to everyone's study. For more related content, please pay attention to the PHP Chinese website!

Related recommendations:

Analysis of the life cycle and principles of the Laravel framework


Routing settings of the Laravel framework

######

The above is the detailed content of Laravel framework implements pagination analysis. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn