xml在joomla表单中的应用详解分享


Posted in PHP onJuly 19, 2012

使用起来基本都有固定格式,在此不多说,这里主要说说xml在创建表单中的应用.表单的作用不言而喻,在模块配置里面有表单,组件里面也有表单,这里的配置里面的参数设置就是xml生成的表单,相对于通过直接建表单方便不少,这里通过编辑文章表单的使用过程来说,在使用之前,我们先来了解一下表单元素的类型,joomla提供了生成多种表单元素样式.

<param name="created" type="calendar" label="创建时间" description="时间显示" /> //生成日历时间 
<param name="catid" type="category" default="2" label="Category" description="文章分类列表" /> //得到单元列表 
<param name="catid" type="category" section="com_weblinks" default="0" label="Category" description="其他组件分类" /> //其他组件单元列表 
<param name='m1' type='editors' label='编辑' /> //编辑器选择列表 
<param name='m1' type='filelist' label='编辑' directory='/images' hide_default="1" filter="html"/> //文件列表 html表示显示扩展名为html 
<param name='m1' type='Folderlist' label='编辑' directory='/images' hide_default="1" filter=""/> //文件夹列表 
<param name='m1' type='Hidden'/> //隐藏域 
<param name="file_name" type="imagelist" directory="/images/stories" filter="" hide_default="1" label="Menu Image" description="图片列表列表" /> 
<param name="list" type="list" label="select列表" description="select 列表"> 
<option value="">未分类</option> 
<option value="0">中国</option> 
<option value="1">美国</option> 
</param> 
<param name='m1' type='password' label='测试' size='20'/> //密码 
<param name="cache" type="radio" default="0" label="单选" description="单选按钮"> //单选 
<option value="0">No</option> 
<option value="1">Yes</option> 
</param> 
<param name="sectionid" type="section" default="0" label="选择单元" description="单元" /> //单元选择 
<param type="spacer"/> //水平线 
<param name='m1' type='sql' label='测试' query="select id,title from #__categories" key_field='id' value_field='title' /> //SQL生成列表 
<param name="robots" type="text" size="20" default="10" label="文本框" description="文本框text" /> //文本框 
<param name="keywords" type="textarea" rows="5" cols="90" label="文本域" description="文本域 textarea" /> //文本域无样式 
<param name="keywords" type="editor" rows="5" cols="90" label="文本域" description="文本域 textarea" /> //文本域有样式 
<param name='m1' type='Timezones' label='测试' default='8' /> //生成时区列表

上边就是提供的一些生成元素,但是如何使用呢,我们首先建立一个form.xml,在组件的models文件夹内
<?xml version="1.0" encoding="utf-8"?> 
<form> 
<name>表单测试 </name> 
<fieldset name='details'/> 
<params group="html" addpath="/administrator/components/com_category/elements"> 
<param name='m1' type='Hidden'/> 
</params> 
</form>

这里只有一个隐藏元素其实我们可以建立更多的元素,就是上边的那些生成元素类型,当然还可以自定义,这里的addpath就是自定义元素类型,位置就是在组建的elements文件夹内,上边的是内置的,笔者在这里定义了如下类型
<param name='custom' type='custom' label='自定义'> //自定义控件 
<param name='arr' type='arr' label='数组' arr="array(1=>'中国',2=>'美国')"/>//数组转换成列表 不写下标从0开始 
<param name='radios' type='radios' label='是否单选'> //生成是否单选 
<param name='arr' type='upload' label='数组' size='20'/>//上传控件 
<param name='arr' type='checkbox' label='数组' arr="array('1'=>'中国','2'=>'美国')"/>//数组复选 
<param name='type' type='type' label='无线分类' />//无限分类 注意添加section父类为0

使用方法如上,元素的自定义文件在下载里面提供.接着我们在views文件夹下面你的视图文件夹内的view.html.php增加如下语句
$form = new JParameter('',JPATH_COMPONENT.DS.'models'.DS.'form.xml'); 
$form->set('m1','默认值'); 
$html=$form->render('details', 'html'); //details是元素名数组 
$this->assignRef('html',$html);

上边第二句就是赋值,把隐藏域赋值,相当于编辑里面取值,第三四句是把表单html输出到模版,details是元素名称数组名,生成的m1的name就是details[m1],接着就是form.php调用如下
<form action="index.php" method="post" name="adminForm"> 
<fieldset class="adminform"><legend>详情</legend> 
<?php 
echo $this->html; 
?> 
<?php echo JHTML::_( 'form.token' ); ?> 
</fieldset> 
</form>

这样一个表单就生成了,相对于直接写表单元素,这种方法更容易修改风格或者内容,修改只需要改xml文件即可,在joomla2.5版本中,基本上都是通过这种方式实现的,不过变化比较大,xml文件写法大不相同,通过xml是可以调用其他组件里面表单元素的.

表单元素的这些类型在模版配置参数,模块参数都是可以使用的,特别是可以自己扩展表单元素的样式,你完全可以定义出其他样式类型,笔者定义了比较常用的几种但是内置没有提供的,比如数组转换列表,数组转换复选,无限分类等样式.这里的类型其实就是api的JElement类,里面的源文件可以参考libraries\joomla\html\parameter\element,这里自定义表单元素怎么写呢这里给个例子或者参考源文件就明白了,文件名custom.php,类型也就是custom了,调用方法<param name='custom' type='custom' label='自定义' />

<?php 
// 自定义显示 
// 
defined('_JEXEC') or die('Restricted access'); class JElementCustom extends JElement{ 
var $_name = 'Custom'; 
function fetchElement($name, $value, &$node, $control_name) { 
$html=<<<EOF 
自定义 
EOF; 
return $html; 
} 
}

好了,就不多讲了,其实这只是一种建立表单的方法,如果你不喜欢,完全可以使用写表单元素,不过既然joomla提供了这些我们为什么不用呢?
下载自定义元素: elements_jb51.rar
PHP 相关文章推荐
简单采集了yahoo的一些数据
Feb 14 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
使用XDebug调试及单元测试覆盖率分析
Jan 27 PHP
php学习之 数组声明
Jun 09 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
php 判断是否是中文/英文/数字示例代码
Sep 30 PHP
php中\r \r\n \t的区别示例介绍
Feb 08 PHP
Yii调试SQL的常用方法
Jul 09 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
php版微信发红包接口用法示例
Sep 23 PHP
php插入含有特殊符号数据的处理方法
Nov 24 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
Nov 29 PHP
ajax在joomla中的原生态应用代码
Jul 19 #PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 #PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 #PHP
PHP的5个安全措施小结
Jul 17 #PHP
php日期转时间戳,指定日期转换成时间戳
Jul 17 #PHP
UCenter 批量添加用户的php代码
Jul 17 #PHP
一个简单的网页密码登陆php代码
Jul 17 #PHP
You might like
php输出指定时间以前时间格式的方法
2015/03/21 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
node.js中的querystring.escape方法使用说明
2014/12/10 Javascript
Jquery api 速查表分享
2015/01/12 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
HTML的select控件美化
2017/03/27 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
13个最常用的Python深度学习库介绍
2017/10/28 Python
使用Python监视指定目录下文件变更的方法
2018/10/15 Python
python实现自动化上线脚本的示例
2019/07/01 Python
基于Python中的yield表达式介绍
2019/11/19 Python
Tory Burch美国官方网站:美国时尚生活品牌
2016/08/01 全球购物
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
"序列点" 是什么
2016/07/29 面试题
公益活动邀请函
2014/02/05 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
歌唱比赛主持词
2014/03/18 职场文书
银行贷款承诺书
2014/03/29 职场文书
员工工作表现评语
2014/04/26 职场文书
2014年公务员个人工作总结
2014/11/22 职场文书
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技