MT分页

以前有发布过一篇日志,采用PageArvhives来对博客的首页或者按分类和按月归档进行分页,PageArvhives会生成静态页面,虽然访问的时候对服务器的要求不高,但是当某个分类下文章多了的时候,发布一篇日志就要生成很多的文件,生成这些文件要等很久。除外,还有一款叫Pagination的插件,我在Windows上装没有成功,因为它使用.htaccess重写了URL。今天在Byrne Reese博客里面看到一种更方便的分页办法,不需要安装任何插件,只要修改一下代码的就好。

在修改代码前要注意备份,先把默认的代码复制下来,以免等下修改不成功,下面我提供的代码可能和您们有差别,因为我的博客是从MT4.0升级上来的,所以一些代码可能和最新版的是不一样的。

更要注意的是,这个是采用PHP实现的,所以确保你的主机支持PHP,如果你采用的是html后缀的话,要让你的主机使用PHP来处理html页面。并且,代码的修改可能会导致Server Side IncludeModule Caching工作不正常。

如果想使用分页,用下面的代码替换你相应的代码即可,并修改一下CSS文件。

首页代码

<$mt:Var name="page_layout" value="layout-wm"$>
<mt:SetVarBlock name="title"><$mt:BlogName encode_html="1"$></mt:SetVarBlock>
<mt:Unless name="datebased_archive"><$mt:Var name="limit" value="auto"$></mt:Unless>

<$mt:Include module="Header" body_class="mt-main-index"$>
<mt:var name="currentp" value="0">
<mt:var name="limit" value="10">
<mt:var name="lastn" value="3000"><?php
$page = $_REQUEST['p'];
if (!isset($page)) { $page = 1; }
?>
<mt:Entries lastn="$lastn">
<mt:setvarblock name="page"><mt:getvar name="__counter__" op="mod" value="$limit"></mt:setvarblock>
<mt:if name="page" eq="1">
<mt:setvar name="currentp" op="add" value="1">
<mt:if name="currentp" gt="1"><?php } ?></mt:if>
<?php if ($page == <$mt:var name="currentp"$>) { ?>
</mt:if>
<$mt:include module="Entry Summary"$>
<mt:if name="__last__"><?php } ?></mt:if>
</mt:Entries>
<div id="content-nav">
<?php
$limit = <mt:var name="limit">;
$page_count = <mt:var name="currentp">;
if ($page < $page_count) {
  echo '<div class="pagination_left"><a id="next-page" href="?p='.($page + 1).'">&laquo; Older Posts</a></div>';
}
if ($page > 1) {
  echo '<div class="pagination_right"><a id="prev-page" href="?p='.($page - 1).'">Newer Posts &raquo;</a></div>';
}
?>
</div>

归档(按月和按分类归档)页面代码

<$mt:Var name="page_layout" value="layout-wm"$>
<mt:SetVarBlock name="page_title"><$mt:ArchiveTitle$></mt:SetVarBlock>
<mt:SetVarBlock name="title"><$mt:Var name="page_title"$> - <$mt:BlogName encode_html="1"$></mt:SetVarBlock>
<mt:Unless name="datebased_archive"><$mt:Var name="limit" value="auto"$></mt:Unless>
<mt:If name="datebased_archive">
    <mt:SetVarBlock name="html_head">
        <mt:ArchivePrevious><link rel="prev" href="<$mt:ArchiveLink$>" title="<$mt:ArchiveTitle encode_html="1"$>" /></mt:ArchivePrevious>
        <mt:ArchiveNext><link rel="next" href="<$mt:ArchiveLink$>" title="<$mt:ArchiveTitle encode_html="1"$>" /></mt:ArchiveNext>
    </mt:SetVarBlock>
</mt:If>

<mt:SetVarBlock name="body_class">mt-archive-listing mt-<$mt:Var name="archive_class"$></mt:SetVarBlock>
<$mt:Include module="Header" body_class="$body_class"$>

<mt:var name="currentp" value="0">
<mt:var name="limit" value="10">
<mt:var name="lastn" value="3000"><?php
$page = $_REQUEST['p'];
if (!isset($page)) { $page = 1; }
?>


<h1 id="page-title" class="archive-title">
<mt:Unless name="datebased_archive">
    <mt:IfArchiveType archive_type="Category">
Recently in <em><$mt:ArchiveTitle$></em> Category
    </mt:IfArchiveType>
    <mt:IfArchiveType archive_type="Author">
Recently by <em><$mt:ArchiveTitle$></em>
    </mt:IfArchiveType>
<mt:Else>
<$mt:Var name="page_title"$>
</mt:Unless>
</h1>

<mt:Entries>
<mt:setvarblock name="page"><mt:getvar name="__counter__" op="mod" value="$limit"></mt:setvarblock>
<mt:if name="page" eq="1">
<mt:setvar name="currentp" op="add" value="1">
<mt:if name="currentp" gt="1"><?php } ?></mt:if>
<?php if ($page == <$mt:var name="currentp"$>) { ?>
</mt:if>
<$mt:include module="Entry Summary"$>
<mt:if name="__last__"><?php } ?></mt:if>
</mt:Entries>

<div id="paginaton">
<?php
$limit = <mt:var name="limit">;
$page_count = <mt:var name="currentp">;
if ($page < $page_count) {
  echo '<div class="pagination_left"><a id="next-page" href="?p='.($page + 1).'">&laquo; Older Posts</a></div>';
}
if ($page > 1) {
  echo '<div class="pagination_right"><a id="prev-page" href="?p='.($page - 1).'">Newer Posts &raquo;</a></div>';
}
?>
</div>


<div class="content-nav">
    <mt:ArchivePrevious>
    <a href="<$mt:ArchiveLink$>">&laquo; <$mt:ArchiveTitle$></a> |
    </mt:ArchivePrevious>
    <a href="<$mt:Link template="main_index"$>">Main Index</a> |
    <a href="<$mt:Link template="archive_index"$>">Archives</a>
    <mt:ArchiveNext>
    | <a href="<$mt:ArchiveLink$>"><$mt:ArchiveTitle$> &raquo;</a>
    </mt:ArchiveNext>
</div>

<$mt:Include module="Footer"$>

CSS文件

#pagination {
}

.pagination_left {
    float:left;
}

.pagination_right {
    float:right;
}

修改完重建一下响应的页面就OK,如果我提供的代码不行的话,可以去Byrne Reese那去查看原始版本,然后自己修改。注意,在修改代码之前最好要备份一下,以免修改不成功。

5 Comments

  1. 我的System Email设置了邮箱yo2@qq.com了啊,你收到的垃圾邮件不是这个地址吗?还有你今天的评论我没收到,以前的都在垃圾邮件里了。

  1. 真是獲益良多
    最近剛更新成MT4.25
    又剛好想找分頁的Plugin
    之前是看上PageArvhives
    看到板主寫的這篇後,決定用新的方法了
    感謝分享^^

  1. 现在升级到5了,我做的那个不是很完善的channel模板使用了这种分页模式,如果需要可以看看那边的代码。