站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
▼
建站程序
开发
服务器
办公软件
开发教程
▼
服务器教程
软件使用教程
运营教程
热门电子书
▼
CSS教程
WordPress教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
热点词条
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Xoops ORM对象关系映射2
”(章节)
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
===缓存=== 上例讲解了如何借助于Frameworks库模拟外键,模拟外键的优势是直接把数据库中的父表和子表转化成父对象和子对象,缺点是父对象和子对象要分别查询,如果层次关系比较复杂,则查询次数也将随之上升,这将直接影响网页的性能,此时就可以借助于Frameworks库的缓存机制将数据保存成为硬盘文件,直接从硬盘文件读取数据将提高网页的性能,降低数据库的压力,本例将演示如何使用Frameworks库的缓存函数库,文件夹结构如下; <pre> /modules/ormcache /class /section.php /images /logo.png /sql /mysql.sql /templates /ormcache_index.html /index.php /xoops_version.php </pre> 其中xoops_version.php的内容如下: <pre> /modules/ormcache/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'] = "ormcache"; $modversion["hasMain"] = 1; $modversion["sqlfile"]["mysql"] = "sql/mysql.sql"; $modversion["tables"][] = "ormcache_section"; $modversion["templates"][0]["file"] = "ormcache_index.html"; $modversion["templates"][0]["description"] = "Template for index.php"; ?> </pre> 本例数据结构与“分页”小节类似,mysql.sql的源代码如下: <pre> /modules/ormcache/sql/mysql.sql CREATE TABLE `ormcache_section` ( /* 详见源代码 */ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=10 ; -- 详见源代码 </pre> 对应的数据对象和数据访问句柄源代码如下: <pre> /modules/ormcache/class/section.php <?php /* 详见源代码 */ class OrmcacheSection extends ArtObject { function OrmcacheSection () { $this->ArtObject("ormcache_section"); /* 详见源代码 */ } } class OrmcacheSectionHandler extends ArtObjecthandler { function OrmcacheSectionHandler($db) { $this->ArtObjectHandler($db, "ormcache_section", "OrmcacheSection", "id", "caption"); return; } } ?> </pre> 可以看出代码中并没有相应的缓存处理代码,这是因为缓存依赖于具体的业务逻辑,本例中在页面处理缓存的逻辑,源代码如下: <pre> /modules/ormcache/index.php <?php require_once dirname(__FILE__)."/../../mainfile.php"; $sectionhandler = xoops_getmodulehandler("section", "ormcache"); /* @var $sectionhandler OrmcacheSectionHandler */ load_functions("cache"); $sectionscache = mod_loadCacheFile("sectionscache"); if (false === is_array($sectionscache)) { $criteria = new CriteriaCompo(); $criteria->setSort("id"); $criteria->setOrder("ASC"); $sectionscache = $sectionhandler->getAll($criteria, null, false); mod_createCacheFile($sectionscache, "sectionscache"); } foreach ($sectionscache as $key => $value) { $section = $sectionhandler->create(false); /* @var $section OrmcacheSection */ $section->assignVars($value); $allsections[$key] = $section; unset($section); } $xoopsOption["template_main"] = "ormcache_index.html"; include XOOPS_ROOT_PATH."/header.php"; $xoopsTpl->assign_by_ref("allsections", $allsections); include XOOPS_ROOT_PATH."/footer.php"; ?> </pre> 为了使用Frameworks库中的缓存函数,首先需要加载缓存函数。 load_functions("cache"); load_functions函数是Frameworks库提供用于动态加载函数,定义在Frameworks库的初始化文件中。 <pre> /Frameworks/art/functions.ini.php function load_functions($group = "", $dirname = "art") {} </pre> 其中参数$group是需要加载的函数组的名称,例如本例使用缓存函数,所以值为cache,加载了函数之后,就尝试加载缓存数据。 $sectionscache = mod_loadCacheFile("sectionscache"); mod_loadCacheFile函数用于加载保存在硬盘上的缓存数据。定义如下: <pre> /Frameworks/art/functions.cache.php function &mod_loadCacheFile($name, $dirname = null) {} </pre> 其中参数$name是缓存的名称,加载缓存数据时需要和保存缓存数据时使用相同的名称,本例中使用的名称为sectionscache,然后判断缓存数据是否有效。 if (false === is_array($sectionscache)) { 如果缓存数据无效,则构造查询条件,然后查询数据。 $sectionscache = $sectionhandler->getAll($criteria, null, false); getAll函数的第三个参数代表函数的返回值,为true时,返回值为数据对象数组,为false时,返回值为数据记录值数组,数据记录值数组便于缓存,接下来就缓存所缓取的数据。 mod_createCacheFile($sectionscache, "sectionscache"); mod_createCacheFile函数用于将数据保存到硬盘上,定义如下: <pre> /Frameworks/art/functions.cache.php function mod_createCacheFile($data, $name = null, $dirname = null) {} </pre> 其中参数$data是需要缓存的数据,参数$name是缓存的名称,这个名称对应于mod_loadCacheFile的参数$name,再次访问页面时就会直接调用缓存中的数据,而不是访问数据库,生存的数据缓存文件如下所示: <pre> /cache/ormcache_sectionscache.php <?php return array ( 1 => array ( 'id' => '1', 'caption' => 'xoops_version.php', ), 2 => array ( 'id' => '2', 'caption' => '模块普通页面', ), 3 => array ( 'id' => '3', 'caption' => '模块管理页面', ), 4 => array ( 'id' => '4', 'caption' => '数据表', ), 5 => array ( 'id' => '5', 'caption' => '数据对象', ), 6 => array ( 'id' => '6', 'caption' => '条件对象', ), 7 => array ( 'id' => '7', 'caption' => '表单对象', ), 8 => array ( 'id' => '8', 'caption' => '模板', ), 9 => array ( 'id' => '9', 'caption' => '区块', ), ); ?> </pre> 在处理数据缓存之后,接下来将数据转换为对象数据,遍历数组中所有的元素,每个元素都对应于一条数据记录。 foreach ($sectionscache as $key => $value) { 对于每条数据记录创建一个空数据对象。 $section = $sectionhandler->create(false); create函数的参数$isNew默认值是true,代表创建一个新对象,如果设置为false,则创建一个空数据对象,以便于填充数据。 $section->assignVars($value); assignVars函数定义在XoopsObject类中。 <pre> /kernel/object.php function assignVars($var_arr) {} </pre> 参数$var_arr是一个数组,数组的键名是数据的字段名,键值是数据的字段值。填充数据后组成对象数组。 $allsections[$key] = $section; 由于[[PHP]]采用引用处理对象赋值,所以最后应销毁对象引用。 unset($section); 这样就完成了从数组数据到对象数组的转换。用于显示的模板和“数据查询”小节相似。 <pre> /modules/ormcache/templates/ormcache_index.html <{strip}> <table> <!-- 详见源代码 --> </table> <{/strip}> </pre> 效果也一样如图 2 5 getObjects效果所示,从此可以看出,实现缓存仅影响页面,既不影响数据对象和数据访问句柄,也不影响模板,仅需要在页面中处理。 [[category:Xoops模块开发指南]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)