站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
▼
建站程序
开发
服务器
办公软件
开发教程
▼
服务器教程
软件使用教程
运营教程
热门电子书
▼
CSS教程
WordPress教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
热点词条
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Xoops模块开发应用实例2
”(章节)
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
===模板=== 上例中通过XOOPS系统提供的表单对象,将表单封装成对象后输出,可以把表单的数据和相应的HTML标记展现分离,在XOOPS系统中还提供了模板机制,可以将页面的数据和页面的展现分离,接下来本例将讲解如何使用模板。本例的文件夹结构如下: <pre> /modules/moddevtemplate /class /contact.php /images /logo.png /sql /mysql.sql /templates /moddevtemplate_index.html /index.php /xoops_version.php </pre> 其中xoops_version.php的内容如下: <pre> /modules/moddevtemplate/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'] = "moddevtemplate"; $modversion["hasMain"] = 1; $modversion["sqlfile"]["mysql"] = "sql/mysql.sql"; $modversion["tables"][] = "moddevtemplate_contact"; $modversion["templates"][0]["file"] = "moddevtemplate_index.html"; $modversion["templates"][0]["description"] = "Template for index.php"; ?> </pre> 其中templates参数代表模块的模板,$modversion[“templates”]是一个数组,数组中的每一项都是一个模板,每一项包含两个键值,file键值代表模板文件名,description键值代表模板的说明。本例中模块包含一个模板$modversion[“templates”][0],模板文件名用$modversion[“templates”][0][“file”]定义,值是moddevtemplate_index.html,模板说明用$modversion[“templates”][0] [“description”]定义。 说明:XOOPS系统中所有的模板都可以被任何一个模块使用,因此模板的文件名应当是唯一的,习惯上采用模块的目录名加上下划线作为文件名的前缀,例如本例中的模块名是moddevtemplate,所以模板文件名使用moddevtemplate_作为前缀。 当模块中带有模板时,安装模块的过程中会显示添加模板的相应说明,如图1-25安装模板模块所示。 <div> [[Image:xop83.jpg]] </div> 在安装过程中,当XOOPS系统发现定义了templates键时,会开始添加模块中的模板,并输出相应的说明。 Adding templates... 在添加模板的过程中会逐一添加定义的模板,首先会把模板添加到数据库中,并输出相应的说明。 Template moddevtemplate_index.html added to the database. (ID: 29) 然后编译该模板,输出相应的说明。 Template moddevtemplate_index.html compiled. 为便于对照学习,数据结构与上例类似,mysql.sql的内容如下: <pre> /modules/moddevtemplate/sql/mysql.sql CREATE TABLE `moddevtemplate_contact` ( /* 详见源文件 */ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; INSERT INTO `moddevtemplate_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/moddevtemplate/class/contact.php <?php class ModdevtemplateContact extends XoopsObject { function ModdevtemplateContact() { /* 详见源文件 */ } } class ModdevtemplateContactHandler extends XoopsObjectHandler { function getAll ($criteria = null) { /* @var $criteria Criteria */ $ret = array(); if (true === isset($criteria)) { $sql = "SELECT * FROM ".$this->db->prefix("moddevtemplate_contact"). " ".$criteria->renderWhere(); } else { $sql = "SELECT * FROM ".$this->db->prefix("moddevtemplate_contact"); } $result = $this->db->query($sql); if (false === $result) { return $ret; } while (false !== ($row = $this->db->fetchArray($result))) { $contact = new ModdevtemplateContact(); $contact->assignVars($row); $ret[$row["id"]] = $contact; unset($contact); } return $ret; } } ?> </pre> 在XOOPS系统中增加模板只需要修改页面,本例的index.php页面的源代码如下: <pre> /modules/moddevtemplate/index.php <?php require_once dirname(__FILE__)."/../../mainfile.php"; $contacthandler = xoops_getmodulehandler("contact", "moddevtemplate"); /* @var $contacthandler ModdevtemplateContactHandler */ $xoopsOption["template_main"] = "moddevtemplate_index.html"; include XOOPS_ROOT_PATH."/header.php"; /* @var $xoopsTpl XoopsTpl */ include_once XOOPS_ROOT_PATH."/class/xoopsformloader.php"; $search_form = new XoopsThemeForm("Search Contact", "search_form", "", "get"); $search_form->addElement(new XoopsFormText("first Name:", "firstname", 20, 20)); $search_form->addElement(new XoopsFormButton("", "submit", _SUBMIT, "submit")); $xoopsTpl->assign_by_ref("search_form", $search_form->render()); if (true === isset($_GET["firstname"])) { $myts =& MyTextSanitizer::getInstance(); $criteria = new Criteria("firstname", $myts->addSlashes($_GET["firstname"])); $contacts = $contacthandler->getAll($criteria); } else { $contacts = $contacthandler->getAll(); } $xoopsTpl->assign_by_ref("contacts", $contacts); include XOOPS_ROOT_PATH."/footer.php"; ?> </pre> 与上例相比,最明显的区别是页面中没有包含任何HTML标记,而是先声明页面将使用的模板。 $xoopsOption["template_main"] = "moddevtemplate_index.html"; 声明模板的语句应当放在include XOOPS_ROOT_PATH."/header.php";语句之前,$xoopsOption变量主要用于设置XOOPS系统相关的选项,键名为 template_main的选项代表当前页面使用的模板。模板选项的值就是模板的文件名。接下来创建表单对象的过程和上例相同,区别在于没有直接输出,而是将表单的内容设置为模板的变量。 $xoopsTpl->assign_by_ref("search_form", $search_form->render()); $xoopsTpl变量是XOOPS系统提供的模板对象,在XOOPS_ROOT_PATH."/header.php";文件中创建,因此应当在 include XOOPS_ROOT_PATH."/header.php";之后使用$xoopsTpl变量。$xoopsTpl的类型是XoopsTpl,定义在 template.php文件中。 <pre> /class/template.php class XoopsTpl extends Smarty {} </pre> XoopsTpl类继承自Smarty类,对于模块开发者而言,可以直接当成Smarty类使用。 assign_by_ref函数是Smarty类的成员函数,用于按引用设置模板变量值。 assign_by_ref函数的文档参见http://smarty.php.net/manual/en/api.assign.by.ref.php。 render是XoopsThemeForm的成员函数,功能是将主题风格的表单对象输出成HTML。定义如下。 <pre> /class/xoopsform/themeform.php function render() {} </pre> 将表单对象的输出HTML设置为模板变量后,就可以在模板中自由的放置显示位置。和上例的另一个区别是没有枚举$contacts数组并输出,而是设置为模板变量。 $xoopsTpl->assign_by_ref("contacts", $contacts); 通过传递两个模板变量,就将程序逻辑从页面展示中分离出来。而页面展示则通过moddevtemplate_index.html模板实现,代码如下: <pre> /modules/moddevtemplate/templates/moddevtemplate_index.html <{strip}> <{$search_form}> <table> <tr> <th> id </th> <th> first name </th> <th> last name </th> <th> QQ </th> <th> QQ Mail </th> <th> Google Talk </th> <th> Google Mail </th> <th> Skype </th> </tr> <{foreach item="contact" from=$contacts}> <tr> <td> <{$contact->getVar("id")}> </td> <td> <{$contact->getVar("firstname")}> </td> <td> <{$contact->getVar("lastname")}> </td> <td> <{$contact->getVar("QQ")}> </td> <td> <a href="mailto:<{$contact->getVar("QQMail")}>"> <{$contact->getVar("QQMail")}> </a> </td> <td> <{$contact->getVar("GTalk")}> </td> <td> <a href="mailto:<{$contact->getVar("GMail")}>"> <{$contact->getVar("GMail")}> </a> </td> <td> <{$contact->getVar("Skype")}> </td> </tr> <{/foreach}> </table> <{/strip}> </pre> XOOPS系统中页面模板都是保存在模块的templates文件夹中,而在xoops_version.php文件中声明或者在页面中使用则不需要写文件夹。下面分析模板的结构,<{strip}>是[[Smarty]]提供的标记,用于清除额外的空白字符和回车换行字符,这样模板中既可以保持便于阅读的缩进格式,又不会影响输出的效果。 <{$search_form}>用于输出变量$search_form,也就是表单。<{foreach item="contact" from=$contacts}>是Smarty提供的标记,用于枚举数组中的元素。 模板与数据库的共同点是XOOPS系统在安装模块和卸载模块时都会启动相应的安装过程和卸载过程。区别在于XOOPS系统在更新模块的过程中不支持数据库的更新,但是支持模板的更新。在安装模板后,进入管理区的模块管理页面,可以看到每个模块都有对应的更新模块的图标[[Image:xop87.png]] ,单击moddevtemplate模块的更新图标,则会出现更新模块的确认框。如图1-26更新模块确认框所示。 <div> [[Image:xop84.jpg]] </div> 单击“更新”按钮就会更新模块并输出更新模块的详细信息。如图1-27更新模块信息所示。 <div> [[Image:xop85.jpg]] </div> 当xoops_version.php中包含templates时,就会启动更新模板的过程。 Updating templates... 每个模板先被重新插入到数据库中。 Template moddevtemplate_index.html inserted to the database. 然后被重新编译。 Template moddevtemplate_index.html recompiled. 在卸载过程中,也会卸载模板并输出卸载模板的详细信息。如图1-28卸载模板过程所示。 <div> [[Image:xop86.jpg]] </div> 当xoops_version.php中包含templates时,就会启动卸载模板的过程。 Deleting templates... 每个模板都会被XOOPS系统从数据库中删除。 Template moddevtemplate_index.html deleted from the database. Template ID: 31
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)