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 相关文章推荐
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
过滤掉PHP数组中的重复值的实现代码
Jul 17 PHP
php常用Output和ptions/Info函数集介绍
Jun 19 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
PHP创建word文档的方法(平台无关)
Mar 29 PHP
php 魔术常量详解及实例代码
Dec 04 PHP
ThinkPHP实现图片上传操作的方法详解
May 08 PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 PHP
PHP预定义超全局数组变量小结
Aug 20 PHP
PHP _construct()函数讲解
Feb 03 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 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
zend framework文件上传功能实例代码
2013/12/25 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
浅谈PHP中的
2016/04/23 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
最常用的12种设计模式小结
2011/08/09 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
ajax图片上传,图片异步上传,更新实例
2016/12/30 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
详解webpack-dev-server的简单使用
2018/04/02 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
整理Python中的赋值运算符
2015/05/13 Python
Python中map和列表推导效率比较实例分析
2015/06/17 Python
python批量提取word内信息
2015/08/09 Python
Python中操作符重载用法分析
2016/04/29 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
Python 支持向量机分类器的实现
2020/01/15 Python
店长岗位的工作内容
2013/11/12 职场文书
保健品市场营销方案
2014/03/31 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书
2014年财务工作总结与计划
2014/12/08 职场文书