之前闲来无事(也不是无事,只是不想干活的借口
),做了一个专门放书的网站文抄公,然后四处搜罗txt格式的书往上面直接就是一扔,扔着是爽了,可是看的时候很痛苦,为啥内?因为post内分页的问题……
wordpress的post内分页的实现我想很多人都知道,就是在文章内简单地插入一个<!–nextpage–>注释即可,然后就会看到页面下方中出现了一个个可爱的数字链接,点一点就会跳到相应的页面去,不用担心由于不停地滚动屏幕造成键盘pagedown键或者鼠标滚轮的过劳死,不过,当文章非常之长,分页非常之多的时候,将会出现如下图所示的诡异场面:

这80多个连接还是在我将每页的内容扩大之后的结果,如果按照原来的排版,将会出现100多个连接!那么接下来要做的事,就是让我们去找插件吧
。嗯,于是,我遇到了pageBar V2。应该说这个插件做的事情很简单,就是干掉多余的链接,试用过后效果还是比较显著的,至少对于正常的阅读来说,不会再担心容易点错连接的问题,效果如下图:

不过这个插件在使用的时候需要注意几点:
-
它自己号称能自动插入页面,可惜的是,它自动插入的是外部页面而不是post页,如果原来已经使用了诸如wp_pagenavi的插件的话,那还是取消自动插入吧,否则你会看到街面上出现两个超链接列表,有点无所适从(而且它所谓的去除原有超链接列表的功能应该是针对wordpress最原始的那个上一页下一页的超链接而已,对wp_pagenavi并不起作用,它所谓的去除只是设置了样式表为display:none而已。)
-
需要手动修改页面模板,将原有使用的代码如:
Language: PHP<? wp_link_pages();?>
替换成:
< ?php if (function_exists('multipagebar')) multipagebar(); ?>如果原来没有调用
wp_link_page()的话,则可以直接插将上述代码放置在the_content('......');之后。
在解决完正常页面下显示的问题之后,试着看了一下wap下的显示效果,结果……又看到一屏幕的超链接……由于在手机上,这么多的超链接的视觉震撼效果更加强烈。
由于用的是wp-t-wap插件,不大可能去直接调用pagebar,在想了一下之后,还是直接修改wp-t-wap插件吧。下面是大致的修改步骤(需要说明的是,wp-t-wap的wap实现机制是将插件中的子目录wap完全复制到系统根目录中,所以修改的时候记得修改2份,以免由于有时候禁用/启用插件而导致问题的重复出现):
找到插件目录,一般是/站点地址/wp-content/plugins/wp-t-wap/,它下面会有一个子目录wap,我们要修改的内容就是其中的functions.php(wp-t-wap的实现其实就是实现一个简化版的wordpress,调用相对简单的函数而已)。找到其中的函数_wap_link_pages。正常情况下,需要修改部分的代码应该是长成这个样子:
$output = $before; for ( $i = 1; $i < ($numpages+1); $i = $i + 1 ) { $j = str_replace('%',"$i",$pagelink); $output .= ' '; if ( ($i != $page) || ((!$more) && ($page==1)) ) { if ( 1 == $i ) { $output .= '<a href="' . _get_permalink() . '">'; } else { $output .= '<a href="' . _get_permalink() . '&page=' . $i . '">'; } } $output .= $j; if ( ($i != $page) || ((!$more) && ($page==1)) ) $output .= '</a>'; }
这段代码干的活就是从1开始遍历输出所有的超链接,如果是当前页则没连接之类,一看就和wordpress默认的实现基本一致,在少数据量的情况下自然无碍,不过就不适应我的情况了。而我要做的事情很简单,留头留尾留中间,和三个点距离过远的全部掐掉,代码很简单,看看应该也会自行修改,就不废话了:
$output .= $before; $flag = array(0,0); for ( $i = 1; $i < ($numpages+1); $i = $i + 1 ) { $j = str_replace('%',"$i",$pagelink); if (abs($page-$i)<=4||$i<=3||$i>=($numpages-2)){ $output .= ' '; if ( ($i != $page) || ((!$more) && ($page==1)) ) { if ( 1 == $i ) { $output .= '<a href="' . _get_permalink() . '">'; } else { $output .= '<a href="' . _get_permalink() . '&page=' . $i . '">'; } } $output .= $j; if ( ($i != $page) || ((!$more) && ($page==1)) ) $output .= '</a>'; } else{ if ($i<$page&&$flag[0]==0){ $output.='……'; $flag[0]=1; } if ($i>$page&&$flag[1]==0){ $output.='……'; $flag[1]=1; } }
我在循环中判断一下当前变量$i的取值范围,如果变量在自己周围(abs($i-$page))的9步内(前后各4个,不包括当前页)或者在头的三个范围内或者尾的三个范围内,则输出超链接,否则输出省略号…(就是我上一篇日志中苦苦寻找的html实体字符编码),并做标记,免得给我输出上百个省略号。然后,没有然后了,然后就实现了想要的功能,大功告成(记得复制到根目录的wap/下~~),最终wap效果图如下:




如果是ASP呢,类似这样的分页怎么处理
[回复]
@jolly: asp的话似乎网上有提供很多现成的分页类哦,刚才搜索了一下,他们自带的分页都还不错,不像wp自带的这么傻。
[回复]
难怪会出现33万字的文章~
[回复]