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 相关文章推荐
用Apache反向代理设置对外的WWW和文件服务器
Oct 09 PHP
玩转虚拟域名◎+ .
Oct 09 PHP
php中数组首字符过滤功能代码
Jul 31 PHP
用C/C++扩展你的PHP 为你的php增加功能
Sep 06 PHP
php文件操作相关类实例
Jun 18 PHP
php计算title标题相似比的方法
Jul 29 PHP
基于PHP给大家讲解防刷票的一些技巧
Nov 18 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
PHP实现随机生成水印图片功能
Mar 22 PHP
phpfpm的作用和用法
Oct 10 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
Oct 15 PHP
如何使用php生成zip压缩包
Apr 21 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
短波问题解答
2021/02/28 无线电
PHP实现合并discuz用户
2015/08/05 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
Python基于回溯法子集树模板解决找零问题示例
2017/09/11 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
在pycharm中为项目导入anacodna环境的操作方法
2020/02/12 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
霸王洗发水广告词
2014/03/14 职场文书
个人原因辞职信模板
2015/05/13 职场文书
人民的好儿女观后感
2015/06/18 职场文书
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers