SiteFactory标签解析大揭秘(四)
关键字:分页 分页数据源
一 分页概述
分页,是一套CMS或者任意数据列表页面必须面对的功能,无论是从网站浏览者的角度出发,还是从网站建设者的角度出发,分页是否清晰美观,操作便利,都是最值得重视的方面。
二 SiteFactory的分页关系
SiteFactory的分页,是基于数据源方式完成的,也就是说,分页标签只是表现,分页数据由数据源提供,它们之间的逻辑关系如下图
由上表可看出,页面中有三个不同种类的标签,由于列表标签二设置了分页参数page=”true”,故分页引擎会自动以列表二为数据源进行分页,分页样式则由分页标签中的ID指定。
大家可能会问,你给的例子页面中只有一个分页,SiteFactory支持多分页吗?当然,如果不能支持这个功能,怎么能号称史上最强呢?那么请看下图(注意颜色关系),当同一页面中同时存在多个分页数据源和分页列表标签时,SiteFactory仍然是依照DataSource对应的关系进行分页显示:
此主题相关图片如下:
在页面内同时存在多个分页标签,且都能工作的情况下,请大家注意,只有一个分页标签可以通过URL进行分页驱动,生成静态页时,生成引擎也只按照这个标签的结果进行分页生成。其他标签则只能通过AJAX方式进行分页。那么如何指定是哪个标签呢,这里又涉及到另一个参数,urlpage=”true”,只有在分页数据源标签上设置了这个参数的标签,才能得到URL分页权限,如果同一页面中多个标签都设置了此参数,则引擎会按照先上后下的原则,以找到的第一个标签为准进行分页。
三 分页标签的样式规则
在SiteFactory中,有专用的分页标签库和相应的管理程序,分页标签里面的内容其实就是一个分页的样式规则,它根据数据源反馈回来的数据,整理后输出分页结果。一般的分页标签模板与显示内容对应关系如下:
其中,大部分元素是直接使用,只有LOOP标签需要单独详细描述一下,它也是由几个部分构成:
什么叫半径呢?就是当前页前后的显示范围,假设文章列表共分了100页,那么全部显示出来是不现实的,所以我们用半径参数来约束显示范围,假设半径为3,当前页为6,则循环输出为:
3 4 5 6 7 8 9
当你点击了页面9的时候,则循环列表变为
6 7 8 9 10 11 12
$$$符号是用来分割普通样式与当前页样式的,左边为普通列表样式,右边则是当前页的特殊样式,比如你定义了循环体内容为
{$pageid/}$$${$pageid/},
则上面的输出效果就变为:
3 4 5 6 7 8 9
注意当前页的6变为红色。
四 列表分页标签的制作技巧
普通列表标签如果想要进行分页,仅仅通过增加page=”true”参数是不够的,必须在SQL查询时就进行分页处理,使它可以反馈回正确的分页数据,分页设置在标签建立的第三步,如下图:
图中红线框出的地方,就是分页功能,打开后,则要求填写查询统计语句,那么该怎么写呢?下面笔者就给出最基本的分页SQL与普通列表查询的区别例子:
普通查询为:
SELECT TOP 10 * FROM PE_CommonModel
它对应的分页查询语句则是
SELECT TOP @pagesize * FROM PE_CommonModel WHERE GeneralID NOT IN(SELECT TOP @startrow GeneralID FROM PE_CommonModel)
对应的统计查询语句是
SELECT COUNT(GeneralID ) FROM PE_CommonModel
更复杂的查询均可由这个查询修改得出,唯一要注意的是查询语句与统计查询语句的约束关系请严格保持一致,否则会出现分页不准的情况。
五 内容分页
SiteFactory的内容分页十分简单,您只要使用专用的分页符号,将需要分页的内容包含起来,即可进行分页,页面内的任意分页标签都可以通过设置参数DataSource=”内容分页标签ID”来同步内容分页的分页数据,与配合列表标签的工作方式没有区别,分页符号使用方法如下:
{PE.ContentPage id="contentpage" mode="auto|manual |none" pagesize="100" urlpage="true"}
需分页内容
{/PE.ContentPage}
参数解释:
Id 分页数据源ID,提供给分页标签配对使用
Mode 分页方法,具体分为auto自动分页,manual手动分页,none不分页三种
Pagesize 分页字符数,仅自动分页模式下有用,它设置了每页显示的字符数量。
Urlpage 是否主分页,与列表分页标签一样,通过本参数设置是否为页面内的URL分页数据源。