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 相关文章推荐
追求程序速度,而不是编程的速度
Apr 23 PHP
攻克CakePHP系列三 表单数据增删改
Oct 22 PHP
php运行出现Call to undefined function curl_init()的解决方法
Nov 02 PHP
Zend Studio去除编辑器的语法警告设置方法
Oct 24 PHP
php递归获取目录内文件(包含子目录)封装类分享
Dec 25 PHP
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
PHP自动重命名文件实现方法
Nov 04 PHP
php跨服务器访问方法小结
May 12 PHP
php中smarty区域循环的方法
Jun 11 PHP
PHP多文件上传实例
Jul 09 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
Jul 09 PHP
php修改word的实例方法
Nov 17 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 数组的指针操作实现代码
2011/02/08 PHP
Yii结合CKEditor实现图片上传功能
2014/06/13 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
php商品对比功能代码分享
2015/09/24 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
Javascript 去除数组的重复元素
2010/05/04 Javascript
分页栏的web标准实现
2011/11/01 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
JavaScript如何使用插值实现图像渐变
2020/06/28 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
Python中的并发编程实例
2014/07/07 Python
python的迭代器与生成器实例详解
2014/07/16 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
批处理与python代码混合编程的方法
2016/05/19 Python
Python计算字符宽度的方法
2016/06/14 Python
python基础教程之分支、循环简单用法
2016/06/16 Python
Python深入06——python的内存管理详解
2016/12/07 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
建筑工地文明标语
2014/10/09 职场文书
运动会广播稿50字
2015/08/19 职场文书
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS