当前位置: 编程技术>php
本页文章导读:
▪xml在joomla表单中的应用详解分享
使用起来基本都有固定格式,在此不多说,这里主要说说xml在创建表单中的应用.表单的作用不言而喻,在模块配置里面有表单,组件里面也有表单,这里的配置里面的参数设置就是xml生成的表单,.........
▪ajax在joomla中的原生态应用代码
今天笔者在这里讲一讲使用joomla自带的mootools javascript库的实现ajax,由于是自带库,所以不用管有没有jquery,那么怎么实现呢,首先建立一个ajax的获取按钮,一般我们都是在组件的编辑中用到,所以.........
▪php插入中文到sqlserver 2008里出现乱码的解决办法分享
今天使用php操作数据库时发现插入SQL Server 2008数据库里的中文字段出现乱码,下面是我一开始时的一些情况: 开发环境是php5.3.3+Apache2.2.17+SQL Server 2008,php脚本文件的编码是utf-8,传给数据.........
[1]xml在joomla表单中的应用详解分享
来源: 互联网 发布时间: 2013-11-30
使用起来基本都有固定格式,在此不多说,这里主要说说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="/blog_article/index.html" method="post" name="adminForm">
<fieldset ><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
代码如下:
<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="/blog_article/index.html" method="post" name="adminForm">
<fieldset ><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
[2]ajax在joomla中的原生态应用代码
来源: 互联网 发布时间: 2013-11-30
今天笔者在这里讲一讲使用joomla自带的mootools javascript库的实现ajax,由于是自带库,所以不用管有没有jquery,那么怎么实现呢,首先建立一个ajax的获取按钮,一般我们都是在组件的编辑中用到,所以文件一般在views\你的视图\tmpl\default.php里面:
<input type="button" id="ajaxButton" value="Get方式" />
<div id="someID"></div>
$doc =& JFactory::getDocument();
$script = <<<SCRIPT
window.addEvent('domready', function() {
$('ajaxButton').addEvent('click', function () {
new Ajax(
'index.php?option=com_category&controller=category&task=aj&format=ajax',
{
method: 'get',
update: 'someID'
}
).request();
});
});
SCRIPT;
input这一行是一个获取ajax的按钮,接着是显示返回数据的div层,下面就是使用ajax的mootools代码,简单说下,这里是通过getDocument类方法添加js到文档head里面,注意这里$是代表mootools类库,ajax里面的网址参数首先是组件名,控制器名,执行的方法aj,这个写在控制器里面,就是点击后执行的方法,需要写返回数据,最后就是返回数据类型,这里必须是ajax,否则会把整个文档都返回,我们这里只要aj方法的返回数据部分.有两个参数,get是获取数据方式,someID是绑定的返回数据显示id,这都是必须的.
ajax使用不是必须的,但是有时候不得不用,如果使用原生态的,我想加载还是很快的,mootools库笔者也没有用过,只是照猫画虎,这里毕竟是提供了一种实现ajax的方法,怎么实现POST方法呢,只需要添加相应表单元素即可.在这里笔者就不多说了,因为用的不是很多.好了,就讲到这里,就不提供例子了,如果你需要可以在遇到编辑表单元素时候试试代码什么的都很短,copy一下就好了!
代码如下:
<input type="button" id="ajaxButton" value="Get方式" />
<div id="someID"></div>
$doc =& JFactory::getDocument();
$script = <<<SCRIPT
window.addEvent('domready', function() {
$('ajaxButton').addEvent('click', function () {
new Ajax(
'index.php?option=com_category&controller=category&task=aj&format=ajax',
{
method: 'get',
update: 'someID'
}
).request();
});
});
SCRIPT;
input这一行是一个获取ajax的按钮,接着是显示返回数据的div层,下面就是使用ajax的mootools代码,简单说下,这里是通过getDocument类方法添加js到文档head里面,注意这里$是代表mootools类库,ajax里面的网址参数首先是组件名,控制器名,执行的方法aj,这个写在控制器里面,就是点击后执行的方法,需要写返回数据,最后就是返回数据类型,这里必须是ajax,否则会把整个文档都返回,我们这里只要aj方法的返回数据部分.有两个参数,get是获取数据方式,someID是绑定的返回数据显示id,这都是必须的.
ajax使用不是必须的,但是有时候不得不用,如果使用原生态的,我想加载还是很快的,mootools库笔者也没有用过,只是照猫画虎,这里毕竟是提供了一种实现ajax的方法,怎么实现POST方法呢,只需要添加相应表单元素即可.在这里笔者就不多说了,因为用的不是很多.好了,就讲到这里,就不提供例子了,如果你需要可以在遇到编辑表单元素时候试试代码什么的都很短,copy一下就好了!
[3]php插入中文到sqlserver 2008里出现乱码的解决办法分享
来源: 互联网 发布时间: 2013-11-30
今天使用php操作数据库时发现插入SQL Server 2008数据库里的中文字段出现乱码,下面是我一开始时的一些情况:
开发环境是php5.3.3+Apache2.2.17+SQL Server 2008,php脚本文件的编码是utf-8,传给数据库的编码是GB2312(SQL Server的默认字符编码可能是这个,我不肯定),我用的是微软官方提供的SQLSRV库来连接数据库的(PS:SQL Server 2005开始已经不支持用mssql.dll来连接了),故使用sqlsrv_query($conn, "set names GB2312");语句来设置传给数据库的编码格式的,sql语句这样写了:insert into Opinion (content) values ('aaa中文内容');
运行这条sql语句,发现执行不成功,用sqlsrv_errors()函数来输出错误信息,得到如下结果:
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -46 [code] => -46 [2] => An error occurred translating the query string to utf-8: �ڶ��ֽڵ�Ŀ�����ҳ�У�û�д� Unicode �ַ����ӳ�䵽���ַ� . [message] => An error occurred translating the query string to utf-8: �ڶ��ֽڵ�Ŀ�����ҳ�У�û�д� Unicode �ַ����ӳ�䵽���ַ� . ) )
这是在网页上显示的结果,上面的乱码是原封不动copy下来的。从 “An error occurred translating the query string to utf-8”可以看出是字符编码转换有问题导致的。于是我使用php的iconv函数来对中文进行强制编码转换,然后执行sql语句,代码如下:
$string = iconv('utf-8', 'GB2312//IGNORE', 'aaa中文内容');
$sql = "insert into Opinion (content) values ( $string)";
[code]
这时候又报错了,错误信息如下:
[code]
Array ( [0] => Array ( [0] => 42S22 [SQLSTATE] => 42S22 [1] => 207 [code] => 207 [2] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ���� [message] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ���� ) )
这个错误信息看不出什么头绪,我又把sql语句输出到网页上看一下是不是sql语句写错了,输出结果如下:
insert into Opinion (content) values ( aaa��������)
咋一看好像没问题,其实是有问题的,注意到后面那个括号里的参数是应该用引号来括起来的(表示它是一个字符串),所以我又修改了sql语句,代码如下:
$sql = "insert into Opinion (content) values ( '".$string."')"; 为了看清楚我放大点
用单引号把$string括起来,这样之后执行sql语句成功,并且数据库里保存的中文没有乱码。
开发环境是php5.3.3+Apache2.2.17+SQL Server 2008,php脚本文件的编码是utf-8,传给数据库的编码是GB2312(SQL Server的默认字符编码可能是这个,我不肯定),我用的是微软官方提供的SQLSRV库来连接数据库的(PS:SQL Server 2005开始已经不支持用mssql.dll来连接了),故使用sqlsrv_query($conn, "set names GB2312");语句来设置传给数据库的编码格式的,sql语句这样写了:insert into Opinion (content) values ('aaa中文内容');
运行这条sql语句,发现执行不成功,用sqlsrv_errors()函数来输出错误信息,得到如下结果:
代码如下:
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -46 [code] => -46 [2] => An error occurred translating the query string to utf-8: �ڶ��ֽڵ�Ŀ�����ҳ�У�û�д� Unicode �ַ����ӳ�䵽���ַ� . [message] => An error occurred translating the query string to utf-8: �ڶ��ֽڵ�Ŀ�����ҳ�У�û�д� Unicode �ַ����ӳ�䵽���ַ� . ) )
这是在网页上显示的结果,上面的乱码是原封不动copy下来的。从 “An error occurred translating the query string to utf-8”可以看出是字符编码转换有问题导致的。于是我使用php的iconv函数来对中文进行强制编码转换,然后执行sql语句,代码如下:
代码如下:
$string = iconv('utf-8', 'GB2312//IGNORE', 'aaa中文内容');
$sql = "insert into Opinion (content) values ( $string)";
[code]
这时候又报错了,错误信息如下:
[code]
Array ( [0] => Array ( [0] => 42S22 [SQLSTATE] => 42S22 [1] => 207 [code] => 207 [2] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ���� [message] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ���� ) )
这个错误信息看不出什么头绪,我又把sql语句输出到网页上看一下是不是sql语句写错了,输出结果如下:
代码如下:
insert into Opinion (content) values ( aaa��������)
咋一看好像没问题,其实是有问题的,注意到后面那个括号里的参数是应该用引号来括起来的(表示它是一个字符串),所以我又修改了sql语句,代码如下:
代码如下:
$sql = "insert into Opinion (content) values ( '".$string."')"; 为了看清楚我放大点
用单引号把$string括起来,这样之后执行sql语句成功,并且数据库里保存的中文没有乱码。
最新技术文章: