详情页

typecho分页样式的修改

时间:2023年09月24日

编辑:佚名

大人,时代变了!目前typecho最完美的解决方案了,因为百度只能看到固定思维的代码。
实际生成的html代码,干净到让人窒息
完全的自定义,包括给li元素加上class,给a元素加上class,给上一页下一页加上class,去除typecho自带用于表示更多的li标签。甚至里面的内容我也能添加一些文字。
分页代码
废话不多说,上源码:
<nav class="my-5">
    <?php
      ob_start(); 
      $this->pageNav('&laquo;','&raquo;', 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了,只要领悟能力够应该很容易就从源码中发现怎么自定义了。
相关文章
猜你需要