大人,時代變了!目前typecho最完美的解決方案了,因爲百度只能看到固定思維的代碼。
實際生成的html代碼,乾淨到讓人窒息
完全的自定義,包括給li元素加上class,給a元素加上class,給上一頁下一頁加上class,去除typecho自帶用於表示更多的li標籤。甚至裏面的內容我也能添加一些文字。
分頁代碼
廢話不多說,上源碼:
<nav class="my-5">
<?php
ob_start();
$this->pageNav('«','»', 1, '', array('wrapTag' => 'ul', 'wrapClass' => 'pagination pagination-rounded mb-0 justify-content-center', 'itemTag' => 'li', 'textTag' => 'span', 'currentClass' => 'active', 'prevClass' => 'prev', 'nextClass' => 'next'));
$content = ob_get_contents();
ob_end_clean();
$content = preg_replace("/<li><span>(.*?)<\/span><\/li>/sm", '', $content);
$content = preg_replace("/<li [class=\"active\"]+>(.*?)<\/li>/sm", '<li class="page-item active">$1</li>', $content);
$content = preg_replace("/<li [class=\"prev\"]+>(.*?)<\/li>/sm", '<li class="page-item">$1</li>', $content);
$content = preg_replace("/<li [class=\"next\"]+>(.*?)<\/li>/sm", '<li class="page-item">$1</li>', $content);
$content = preg_replace("/<li>(.*?)<\/li>/sm", '<li class="page-item">$1</li>', $content);
$content = preg_replace("/<a href=\"(.*?)\">(.*?)<\/a>/sm", '<a class="page-link" href="$1">$2</a>', $content);
echo $content;
?>
</nav>主要方式就是利用正則修改,一勞永逸,直接從生成的內容上改變,不用再js一個個的匹配添加調整了,釋放你的想象力。
常用正則
這裏放一些正則的一些通配符:
常用元字符
代碼 說明
. 匹配除換行符以外的任意字符
w 匹配字母或數字或下劃線
s 匹配任意的空白符
d 匹配數字
b 匹配單詞的開始或結束
^ 匹配字符串的開始
$ 匹配字符串的結束
常用限定符
代碼/語法 說明
- 重複零次或更多次
- 重複一次或更多次
? 重複零次或一次
{n} 重複n次
{n,} 重複n次或更多次
{n,m} 重複n到m次
常用反義詞
代碼/語法 說明
W 匹配任意不是字母,數字,下劃線,漢字的字符
S 匹配任意不是空白符的字符
D 匹配任意非數字的字符
B 匹配不是單詞開頭或結束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou這幾個字母以外的任意字符
常用模式修正符
代碼/語法 說明
i 表示在進行匹配的時候不區分大小寫
m 多行識別.即將字符串視爲多行,不管是那行都能匹配
s 將字符串視爲單行,轉義回車換行符作爲普通字符
g 表示全局匹配
x 將模式中的空白忽略
A 強制從目標字符串開頭匹配
D 強制尾部無任何內容.若使用$限制結尾字符,則不允許結尾有換行
U 禁止貪婪匹配,只匹配最近的一個字符串(不重複匹配)
e 配合PHP函數preg_replace()使用,可以把匹配來的字符串當作正則表達式執行
分頁輸出代碼解釋
要想理解爲什麼,首先你要了解$this->pageNav()這段代碼做了什麼,具體你可以百度,很多人自定義都是用的這個,這裏我放一下自己常用的解釋:
page翻頁
wrapTag 外層包裹標籤名, 默認ol
wrapClass 外層包裹類名
itemTag 內層標籤名, 默認li
textTag 直接輸出文字的標籤名
currentClass 當前聚焦類名
prevClass 上一頁類名
nextClass 下一頁類名基本就ok了,只要領悟能力夠應該很容易就從源碼中發現怎麼自定義了。