站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
▼
建站程序
开发
服务器
办公软件
开发教程
▼
服务器教程
软件使用教程
运营教程
热门电子书
▼
CSS教程
WordPress教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
热点词条
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Xoops ORM对象关系映射1
”(章节)
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
===分页=== 在上例的limit.php页面中演示了限制行数的查询方式,在实际应用中,很少有直接指定起始行数和查询行数的情况,通常是用于分页显示查询结果的情况。在实际应用中,当查询结果的行数较多时,通常会采用分页策略。为了便于开发,XOOPS系统提供了XoopsPageNav类用于显示分页导航。在Frameworks库中还提供了查询总行数的函数,以便于计算分页的总页数,接下来本例将讲解如何开发分页导航。本例的文件夹结构如下: <pre> /modules/ormstats /class /section.php /images /logo.png /sql /mysql.sql /templates /ormstats_index.html /index.php /xoops_version.php </pre> 其中xoops_version.php的内容如下: <pre> /modules/ormstats/xoops_version.php <?php $modversion['name'] = "ORM对象关系映射 - 分页"; $modversion['version'] = 0.01; $modversion['description'] = "演示分页显示数据"; $modversion['author'] = <<<AUTHOR 胡争辉 QQ: 443089607 QQMail: hu_zhenghui@qq.com GTalk: huzhengh GMail: huzhengh@gmail.com Skype: huzhenghui" AUTHOR; $modversion['credits'] = ""; $modversion['license'] = "版权所有"; $modversion['image'] = "images/logo.png"; $modversion['dirname'] = "ormstats"; $modversion["hasMain"] = 1; $modversion["sqlfile"]["mysql"] = "sql/mysql.sql"; $modversion["tables"][] = "ormstats_section"; $modversion["templates"][0]["file"] = "ormstats_index.html"; $modversion["templates"][0]["description"] = "Template for index.php"; ?> </pre> 为便于对照学习,本例采用上例中介绍的getByLimit函数,数据结构也类似,mysql.sql的内容如下: <pre> /modules/ormstats/sql/mysql.sql CREATE TABLE `ormstats_section` ( /* 详见源代码 */ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=10 ; -- 详见源代码 </pre> 本例的数据对象和数据访问句柄也不需要额外的编码,与上例类似,section.php文件的源代码如下: <pre> /modules/ormstats/class/section.php <?php /* 详见源代码 */ class OrmstatsSection extends ArtObject { function OrmstatsSection () { $this->ArtObject("ormstats_section"); /* 详见源代码 */ } } class OrmstatsSectionHandler extends ArtObjecthandler { function OrmstatsSectionHandler($db) { $this->ArtObjectHandler($db, "ormstats_section", "OrmstatsSection", "id", "caption"); return; } } ?> </pre> 分页的逻辑都在index.php中处理,源代码如下: <pre> /modules/ormstats/index.php <?php require_once dirname(__FILE__)."/../../mainfile.php"; include_once XOOPS_ROOT_PATH.'/class/pagenav.php'; $sectionhandler = xoops_getmodulehandler("section", "ormstats"); /* @var $sectionhandler OrmstatsSectionHandler */ $xoopsOption["template_main"] = "ormstats_index.html"; include XOOPS_ROOT_PATH."/header.php"; /* @var $xoopsTpl XoopsTpl */ if (true === isset($_GET["start"])) { $start = intval($_GET["start"]); } else { $start = 0; } $limit = 3; $total = intval($sectionhandler->getCount()); $pagenav = new XoopsPageNav($total, $limit, $start); $xoopsTpl->assign_by_ref("pagenav", $pagenav->renderNav()); $xoopsTpl->assign_by_ref("pagenavimage", $pagenav->renderImageNav()); $xoopsTpl->assign_by_ref("pagenavselect", $pagenav->renderSelect()); $allsections = $sectionhandler->getByLimit($limit, $start); $xoopsTpl->assign_by_ref("allsections", $allsections); include XOOPS_ROOT_PATH."/footer.php"; ?> </pre> 开发分页导航需要使用XoopsPageNav类,在使用前需要包含相应的头文件。 include_once XOOPS_ROOT_PATH.'/class/pagenav.php'; 分页导航XoopsPageNav类的构造函数如下: <pre> /class/pagenav.php function XoopsPageNav($total_items, $items_perpage, $current_start, $start_name="start", $extra_arg="") {} </pre> 其中$total_items参数是数据总数,$items_perpage参数是每页显示数据数,$current_start参数是当前显示的数据开始位置。这三个参数的来源各不相同,其中$total_items来自于数据库中保存的数据行数。$items_perpage来源于本页面对于显示数据数的约定。而$current_start则是访问者按分页导航时浏览到的页面。因此获取$current_start参数就需要先判断是否输入了当前的行数。 if (true === isset($_GET["start"])) { 如果输入了当前的行数,说明是通过分页导航浏览到的,就按该变量获取相应的行数。 $start = intval($_GET["start"]); 如果没有输入当前的行数,说明是初次访问,则为行数设置初始值,该值通常是0。 $start = 0; 这样就计算出了$current_start参数。 说明:用于传递当前行数的start,对应于XoopsPageNav类的构造函数的$start_name参数,如果页面中start参数有其他的含义,为避免冲突,需将$current_start参数设置为其他值。 由于分页导航是按照$total_items / $items_perpage计算页数,所以$items_perpage通常是固定值,本例中约定每页显示三行数据。 $limit = 3; 接下来就是获取$total_items参数的值。Frameworks库提供了getCount函数可以直接查询数据行数。 $total = intval($sectionhandler->getCount()); getCount函数是ArtObjectHandler类动态调用ArtObjectStatsHandler类的getCount函数实现的,定义如下: <pre> /Frameworks/art/object.stats.php function getCount($criteria = null) {} </pre> 其中$criteria参数是查询条件,如果未设置该参数,则是查询表中所有的数据行数。为分页导航准备好参数后,就可以创建分页导航对象了。 $pagenav = new XoopsPageNav($total, $limit, $start); 分页导航提供三种效果:文本链接、图片链接和下拉列表框三种显示效果,每种显示效果都是通过函数输出HTML,直接赋值为模板变量即可。 <pre> $xoopsTpl->assign_by_ref("pagenav", $pagenav->renderNav()); $xoopsTpl->assign_by_ref("pagenavimage", $pagenav->renderImageNav()); $xoopsTpl->assign_by_ref("pagenavselect", $pagenav->renderSelect()); </pre> 其中文本链接为renderNav函数,图片链接为renderImageNav函数,下拉列表框为renderSelect函数,这三个函数都是XoopsPageNav类的成员函数,定义如下: <pre> /class/pagenav.php function renderNav($offset = 4) {} function renderImageNav($offset = 4) {} function renderSelect($showbutton = false) {} </pre> 设置了分页导航后,就可以按照上例中方法按起始行数和查询行数获取相应的对象数组了。 $allsections = $sectionhandler->getByLimit($limit, $start); 其中getByLimit函数的两个参数与XoopsPageNav类的构造函数的参数是相同的,结合getCount参数可以发现,借助于Frameworks库,可以直接支持分页导航。对应的模板中除了显示数据之外,只需要显示已设置分页导航变量即可。源代码如下: <pre> /modules/ormstats/templates/ormstats_index.html <{strip}> <{$pagenav}> <{$pagenavimage}> <{$pagenavselect}> <table> <!-- 详见源代码 --> </table> <{/strip}> </pre> 效果如图2-9分页导航所示。 <div> [[Image:xop96.png]] </div> 图中第一行是文字链接分页导航,第二行是图片链接分页导航,第三行是下拉列表框导航。如果页数较多,文字链接和图片链接有可能长度超过页面布局中预想的宽度,此时可以借助于renderNav函数和renderImageNav函数的offset参数控制显示的链接数量。下拉列表框导航是借助于 [[JavaScript]]实现的,如果[[浏览器]]禁止了JavaScript,则需要设置renderSelect函数的$showbutton参数控制显示分页导航按钮,用户可以单击按钮来翻页。效果如图2-10分页导航的选项所示。 <div> [[Image:xop97.png]] </div> renderNav函数和renderImageNav函数的offset参数是指当前页的前后连续显示的页数,例如图中设置了$offset参数的值为 4,当前页是第4页,所以在前面显示第1页、第2页和第3页,包括当前页共有4页。在后面显示第5页、第6页和第7页,包括当前页共有4页,由于总页数超过7页,所以显示省略号,并显示最后一页。renderSelect的$showbutton参数设置为true时,下拉列表框的右侧将显示“确定”按钮。 [[category:Xoops模块开发指南]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)