站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
▼
建站程序
开发
服务器
办公软件
开发教程
▼
服务器教程
软件使用教程
运营教程
热门电子书
▼
CSS教程
WordPress教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
热点词条
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Xoops模块开发应用实例2
”(章节)
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
===区块=== 上例通过模板实现了页面逻辑与页面展现的分离。XOOPS系统中广泛的运用模板技术将逻辑与展现分离,除了页面之外,区块也是通过模板技术实现逻辑与展现分离。接下来本例将讲解如何开发区块。本例的文件夹结构如下: <pre> /modules/moddevblock /blocks /search_form.php /class /contact.php /images /logo.png /sql /mysql.sql /templates /blocks /moddevblock_block_search.html /moddevtemplate_index.html /index.php /xoops_version.php </pre> 其中xoops_version.php的内容如下: <pre> /modules/moddevblock/xoops_version.php <?php $modversion['name'] = "模块开发 - 区块"; $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'] = "moddevblock"; $modversion["hasMain"] = 1; $modversion["sqlfile"]["mysql"] = "sql/mysql.sql"; $modversion["tables"][] = "moddevblock_contact"; $modversion["templates"][0]["file"] = "moddevblock_index.html"; $modversion["templates"][0]["description"] = "Template for index.php"; $modversion['blocks'][0]['file'] = "search_form.php"; $modversion['blocks'][0]['name'] = "Search Contact"; $modversion['blocks'][0]['description'] = "搜索区块"; $modversion['blocks'][0]['show_func'] = "b_moddevblock_search_show"; $modversion['blocks'][0]['template'] = 'moddevblock_block_search.html'; ?> </pre> 其中blocks参数代表模块的区块,$modversion[“blocks”]是一个数组,数组中的每一项都是一个区块,每一项包含五个键值,file键值代表处理区块逻辑的文件名。name键值代表区块的初始标题,description键值代表区块的说明,show_func键值代表处理区块逻辑的函数,template键值代表展现区块所使用的模板。本例中模块包含一个区块$modversion[“blocks”][0],处理区块逻辑的文件是search_form.php,区块的初始标题是Search Contact,处理区块逻辑的函数是 b_moddevblock_search_show,展现区块的模板是 moddevblock_block_search.html。当模块中带有区块时,安装模块的过程中会显示添加区块的相应说明 在安装过程中,当XOOPS系统发现定义了blocks时,会开始添加模块中的区块,并输出相应的说明。 Adding blocks... 在添加区块的过程中会逐一添加定义的区块,首先会把区块添加到数据库中,并输出相应的说明。 Block Search Contact added. Block ID: 17 然后把区块使用的模板添加到数据库中,并输出相应的说明。 Template moddevblock_block_search.html added to the database. (ID: 44) 接下来编辑该模板,输出相应的说明。 Template moddevblock_block_search.html compiled. 为便于对照学习,数据结构与上例类似,mysql.sql的内容如下: <pre> /modules/moddevblock/sql/mysql.sql CREATE TABLE `moddevblock_contact` ( /* 详见源文件 */ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; INSERT INTO `moddevblock_contact` (`id`, `firstname`, `lastname`, `QQ`, `QQMail`, `GTalk`, `GMail`, `Skype`) VALUES (1, '争辉', '胡', '443089607', 'hu_zhenghui@qq.com', 'huzhengh', 'huzhengh@gmail.com', 'huzhenghui'); </pre> XOOPS系统中的区块与数据访问对象、查询对象也相互独立,因此区块以及区块对应的模板不会影响到数据访问句柄,数据访问句柄的功能与结构和上例类似,源代码如下: <pre> /modules/moddevblock/class/contact.php <?php class ModdevblockContact extends XoopsObject { function ModdevblockContact() { /* 详见源文件 */ } } class ModdevblockContactHandler extends XoopsObjectHandler { function getAll ($criteria = null) { /* @var $criteria Criteria */ $ret = array(); if (true === isset($criteria)) { $sql = "SELECT * FROM ".$this->db->prefix("moddevblock_contact"). " ".$criteria->renderWhere(); } else { $sql = "SELECT * FROM ".$this->db->prefix("moddevblock_contact"); } $result = $this->db->query($sql); if (false === $result) { return $ret; } while (false !== ($row = $this->db->fetchArray($result))) { $contact = new ModdevblockContact(); $contact->assignVars($row); $ret[$row["id"]] = $contact; unset($contact); } return $ret; } } ?> </pre> 本例中将查询表单移动到区块中实现,因此index.php的页面中不再需要创建表单对象,修改后的index.php源代码如下: <pre> /modules/moddevblock/index.php <?php require_once dirname(__FILE__)."/../../mainfile.php"; $contacthandler = xoops_getmodulehandler("contact", "moddevblock"); /* @var $contacthandler ModdevblockContactHandler */ $xoopsOption["template_main"] = "moddevblock_index.html"; include XOOPS_ROOT_PATH."/header.php"; /* @var $xoopsTpl XoopsTpl */ /* 详见源文件 */ ?> </pre> 相应的模板中也不需要输出表单,修改后的代码如下: <pre> /modules/moddevblock/templates/moddevblock_index.html <{strip}> <table> <!-- 详见源文件 --> </table> <{/strip}> </pre> 本例中将在区块中实现上例中的查询表单,处理区块逻辑的文件源代码如下: <pre> /modules/moddevblock/blocks/search_form.php <?php include_once XOOPS_ROOT_PATH."/class/xoopsformloader.php"; function b_moddevblock_search_show() { $search_form = new XoopsThemeForm("Search Contact", "search_form", XOOPS_URL."/modules/moddevblock/index.php", "get"); $search_form->addElement( new XoopsFormText("first Name:", "firstname", 10, 10)); $search_form->addElement( new XoopsFormButton("", "submit", _SUBMIT, "submit")); $block["search_form"] = $search_form->render(); return $block; } ?> </pre> 文件名search_form.php就是xoops_version.php中的$modversion['blocks'][0] ['file']的值,所在的文件夹是模块文件夹下面的block子文件夹,XOOPS系统中处理区块逻辑的文件都放在模块文件夹下面的block子文件夹中。函数名b_moddevblock_search_show是xoops_version.php中的$modversion['blocks'] [0]['show_func']的值。由于区块可能处于任何一个页面上,因此区块中的表单需要指定提交的页面URL。 <pre> $search_form = new XoopsThemeForm("Search Contact", "search_form", XOOPS_URL."/modules/moddevblock/index.php", "get"); </pre> 区块中逻辑与展现之间传递信息与页面不同,从上例中可知,XOOPS系统中页面逻辑与展现模板之间通过$xoopsTpl对象传递变量。而区块是通过函数返回值向展现模板传递变量。在多数情况下,区块会向模板传递多个变量,所以函数的返回值采用数组,表单的内容就是数组中的一项。 $block["search_form"] = $search_form->render(); 准备所需的变量后,就通过返回值的形式向区块传递变量。 return $block; 返回变量后,就可以通过模板展现区块了,模板源代码如下: <pre> /modules/moddevblock/templates/blocks/moddevblock_block_search.html <{strip}> <{$block.search_form}> <{/strip}> </pre> 区块模板的文件名moddevblock_block_search.html就是在xoops_version.php中声明的$modversion['blocks'][0]['template']的值。区块模板的文件夹是模块文件夹下面的 templates/blocks子文件夹。区块函数的返回值成为模板中的$block变量,本例中直接输出表单内容。 区块与模板类似,在安装、更新、卸载模块时,都会启动相应的处理过程,在更新带有区块的模块时,会输出相应的详细信息 当xoops_version.php中包含blocks时,就会启动更新区块的过程。 Rebuilding blocks... 先更新每个区块。 Block Search Contact updated. Block ID: 17 然后更新区块对应的模板。 Template moddevblock_block_search.html updated. 最后重新编译区块对应的模板。 Template moddevblock_block_search.html recompiled. 在卸载过程中,也会卸载区块并输出卸载区块的详细信息 当xoops_version.php中包含blocks时,就会启动卸载区块的过程。 Deleting block... 每个区块都会被卸载。 Block Search Contact deleted. Block ID: 17 每个区块对应的模板都会被XOOPS系统从数据库中删除。 Block template moddevblock_block_search.html deleted from the database. Template ID: 44 [[category:Xoops模块开发指南]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)