Home > Article > Backend Development > Laravel framework implements pagination analysis
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) ? '' : ' rel="'.$rel.'"'; return '<li><a href="'.htmlentities($url).'" rel="external nofollow" rel="external nofollow" '.$rel.'>'.$page.'</a></li>'; } /** * Get HTML wrapper for disabled text. * * @param string $text * @return string */ protected function getDisabledTextWrapper($text) { return '<li class="disabled"><span>'.$text.'</span></li>'; } /** * Get HTML wrapper for active text. * * @param string $text * @return string */ protected function getActivePageWrapper($text) { return '<li class="active"><span>'.$text.'</span></li>'; }
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) ? '' : ' rel="'.$rel.'"'; return '<li class="page-item"><a class="page-link" href="'.htmlentities($url).'" rel="external nofollow" rel="external nofollow" '.$rel.'>'.$page.'</a></li>'; } /** * Get HTML wrapper for disabled text. * * @param string $text * @return string */ protected function getDisabledTextWrapper($text) { return '<li class="page-item disabled"><a class="page-link">'.$text.'</a></li>'; } /** * Get HTML wrapper for active text. * * @param string $text * @return string */ protected function getActivePageWrapper($text) { return '<li class="page-item active"><a class="page-link">'.$text.'</a></li>'; }
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( '<ul class="pagination">%s %s %s</ul>', $this->getPreviousButton(), $this->getLinks(), $this->getNextButton() )); } return ''; }
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( '<ul class="pager">%s %s</ul>', $this->getPreviousButton(), $this->getNextButton() )); } return ''; }
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!
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!