Maison > Article > développement back-end > Comment paginer de longs articles en PHP
Cet article présente principalement comment paginer de longs articles en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Lorsque le contenu de l'article est relativement long, afin de mieux satisfaire l'expérience utilisateur, nous affichons le contenu de l'article en pages. Le processus de pagination général consiste à générer plusieurs pages pour le contenu soumis lors de la publication de l'article dans le. arrière-plan. À travers cet article et des exemples, nous utilisons PHP pour paginer dynamiquement le contenu d'articles longs.
Voir la démonstration de l'effet Téléchargement du code source
Comment paginer
Manuel pagination : Général Ajoutez des balises de pagination spéciales, telles que {pages}, lors de l'édition du contenu, après la soumission, le programme PHP traitera la pagination en fonction des sauts de page et générera différentes pages statiques. Cette méthode de pagination est précise en termes de pagination, mais elle nécessite l'ajout manuel de sauts de page, ce qui représente une lourde charge de travail.
Pagination automatique : le programme PHP paginera le contenu en fonction des sauts de page définis, puis générera différentes pages statiques. Cette méthode est très efficace et présente des exigences élevées pour le traitement de différentes balises de code HTML.
Pagination JS frontale : utilisez Javascript pour intercepter le contenu des articles longs en segments et afficher différents contenus segmentés en fonction des demandes pour obtenir l'effet de pagination. Cette méthode lit le contenu en une seule fois et le js frontal gère la pagination, ce qui offre une bonne expérience.
L'exemple de code de cet article explique comment utiliser PHP pour paginer le contenu d'un article long, qui peut être paginé automatiquement ou manuellement. Quant à la génération de pages HTML statiques, elle n'entre pas dans le cadre de cet article. Nous expliquerons plus tard spécifiquement l'introduction des articles statiques.
Classe de pagination
<?php /* * 长文章分页类 */ class cutpage{ private $pagestr; //被切分的内容 private $pagearr; //被切分文字的数组格式 private $sum_word; //总字数(UTF-8格式的中文字符也包括) private $sum_page; //总页数 private $page_word; //一页多少字 private $cut_tag; //自动分页符 private $cut_custom; //手动分页符 private $ipage; //当前切分的页数,第几页 private $url; function __construct($pagestr,$page_word=1000){ $this->page_word = $page_word; $this->cut_tag = array("</table>", "</p>", "</p>", "<br/>", "”。", "。", ".", "!", "……", "?", ","); $this->cut_custom = "{nextpage}"; $tmp_page = intval(trim($_GET["ipage"])); $this->ipage = $tmp_page>1?$tmp_page:1; $this->pagestr = $pagestr; } function cut_str(){ $str_len_word = strlen($this->pagestr); //获取使用strlen得到的字符总数 $i = 0; if ($str_len_word<=$this->page_word){ //如果总字数小于一页显示字数 $page_arr[$i] = $this->pagestr; }else{ if (strpos($this->pagestr, $this->cut_custom)){ $page_arr = explode($this->cut_custom, $this->pagestr); }else{ $str_first = substr($this->pagestr, 0, $this->page_word); //0-page_word个文字 cutStr为func.global中的函数 foreach ($this->cut_tag as $v){ $cut_start = strrpos($str_first, $v); //逆向查找第一个分页符的位置 if ($cut_start){ $page_arr[$i++] = substr($this->pagestr, 0, $cut_start).$v; $cut_start = $cut_start + strlen($v); break; } } if (($cut_start+$this->page_word)>=$str_len_word){ //如果超过总字数 $page_arr[$i++] = substr($this->pagestr, $cut_start, $this->page_word); }else{ while (($cut_start+$this->page_word)<$str_len_word){ foreach ($this->cut_tag as $v){ $str_tmp = substr($this->pagestr, $cut_start, $this->page_word); //取第cut_start个字后的page_word个字符 $cut_tmp = strrpos($str_tmp, $v); //找出从第cut_start个字之后,page_word个字之间,逆向查找第一个分页符的位置 if ($cut_tmp){ $page_arr[$i++] = substr($str_tmp, 0, $cut_tmp).$v; $cut_start = $cut_start + $cut_tmp + strlen($v); break; } } } if (($cut_start+$this->page_word)>$str_len_word){ $page_arr[$i++] = substr($this->pagestr, $cut_start, $this->page_word); } } } } $this->sum_page = count($page_arr); //总页数 $this->pagearr = $page_arr; return $page_arr; } //显示上一条,下一条 function pagenav(){ $this->set_url(); $str = ''; //$str .= $this->ipage.'/'.$this->sum_page; for($i=1;$i<=$this->sum_page;$i++){ if($i==$this->ipage) { $str.= "<a href='#' class='cur'>".$i."</a> "; }else{ $str.= "<a href='".$this->url.$i."'>".$i."</a> "; } } return $str; } function set_url(){ parse_str($_SERVER["QUERY_STRING"], $arr_url); unset($arr_url["ipage"]); if (empty($arr_url)){ $str = "ipage="; }else{ $str = http_build_query($arr_url)."&ipage="; } $this->url = "http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]."?".$str; } } ?>
La classe de coupure ci-dessus peut très bien gérer la pagination du contenu et peut gérer les problèmes causés par différentes balises HTML. Si le contenu comporte un saut de page {page suivante}, le contenu sera automatiquement paginé en fonction du saut de page en premier.
Appel de la classe de pagination
Nous supposons que le contenu de l'article du fichier text.txt est lu Dans le projet lui-même, le formulaire doit soumettre un contenu long ou lu. le contenu de la table liée à la base de données. Instanciez ensuite la classe de pagination, puis appelez le contenu de pagination correspondant en fonction de la page actuelle et affichez-le, ainsi que la barre de pagination.
<?php $content = file_get_contents('text.txt'); $ipage = $_GET["ipage"]? intval($_GET["ipage"]):1; $CP = new cutpage($content); $page = $CP->cut_str(); echo $page[$ipage-1]; echo $CP->pagenav(); ?>
Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.
Recommandations associées :
Principe de tri rapide php et méthode de mise en œuvre et exemple d'analyse
Méthode PHP pour réaliser l'affichage de la pagination des données et exemple simple
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!