[thinkphp]自定义一个信息对话框(lightbox_me)

在使用discuzx中有一个Message以及Dialog方法来显示信息对话框。今天写项目的时候,需要一个信息对话框,所以就着手利用lightbox_me插件来写一个做备用。

注:lightbox_me插件官网 http://buckwilson.me/lightboxme/

第一步: 下载lightbox_me插件

20140108191010

 

第二步:实现对话框弹出功能,并异步获得信息对话框数据

1.  在尾部文件中添加对话框代码

<div id="Message" style="display: none;"></div>

2. 在头部文件中导入js文件

<script type="text/javascript" src="__PUBLIC__/Js/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="__PUBLIC__/Js/jquery.json-2.4.min.js"></script>
<script type="text/javascript" src="__PUBLIC__/Js/jquery.lightbox.js"></script>

3.  添加链接标签

<a class="btn" href="{:U("Message",array('id'=>1))}" id="Dialog">在线调查</a>

4. 自定义弹出窗口方法(main.js文件)

$("#Dialog").click(function() {
        var href = $(this).attr("href");
        $.get(href).success(function(data) {
            if (typeof (data) != "object") {
                data = $.parseJSON(data);
            }
            $("#Message").html(data.info);
        });
        $("#Message").lightbox_me({
            centered: true,
            onLoad: function() {
                $('#Message').find('input:first').focus();
            }
        });
        return false;
    });

5. 异步获得信息

public function Message($id = null) {
        $data = "";
        switch ($id){
            //在线调查
            case 1:{
                $data = '<h3>在线调查<a href="javascript:void(0);" class="close"></a></h3>
                        <div class="Message_Content">
                        <form action="'.U('Diaocha').'" method="post">
                            <table>
                                <tr><td>1. 你的性别是?</td></tr>
                                <tr><td><input type="radio" name="sex" value="1">男</td></tr>
                                <tr><td><input type="radio" name="sex" value="0">女</td></tr>
                                <tr><td>2. 你的年龄是?</td></tr>
                                <tr><td><input type="radio" name="age" value="0">18岁以下</td></tr>
                                <tr><td><input type="radio" name="age" value="1">18-35</td></tr>
                                <tr><td><input type="radio" name="age" value="2">35-60</td></tr>
                                <tr><td><input type="radio" name="age" value="3">60岁以上</td></tr>
                                <tr><td>3. 对图书交易会的评价?</td></tr>
                                <tr><td><input type="radio" name="pingjia" value="0">不好(简单说下理由)<input type="text" value="" name="liyou" /></td></tr>
                                <tr><td><input type="radio" name="pingjia" value="1">一般</td></tr>
                                <tr><td><input type="radio" name="pingjia" value="2">不错,希望能继续开展这样的交易会</td></tr>
                                <tr><td>4. 您喜欢的书有哪些?(填写最喜欢的10本书名)</td></tr>
                                <tr><td><textarea name="content"></textarea></td></tr>
                                <tr><td colspan="2"><input type="submit" name="submit" value="提交" /></td></tr>
                            </table>
                        </form>
                        </div>';
                $this->success($data);
            }
        }
    }

第三步: 效果

20140108192106

【Thinkphp】字符串截取函数msubstr

使用Thinkphp开发项目,需要对列表文字进行截取,而不至于文字溢出。一开始使用的是PHP再带的截取函数substr,发现此函数只对英文或者数字截取,然后再使用mb_substr,还是出现问题:会出现乱码。查看thinkphp文档发现有对应的函数(msubstr),可以来实现以上截取中英文功能。请看如下代码:

<span>{$zhzj.desc|msubstr=0,156}<a href=”{:U(‘page’,array(“nav”=>$zhzj[‘name’]))}”>[查看详情]</a>

如果直接在模板中使用该函数的话,可能会提示此函数找不到,解决方法:导入thinkphp函数库即可。代码如下:

Load(‘extend’);

msubstr函数使用方法:

msubstr($str, $start=0, $length, $charset=”utf-8″, $suffix=true)

  • $str:要截取的字符串
  • $start=0:开始位置,默认从0开始
  • $length:截取长度
  • $charset=”utf-8″:字符编码,默认UTF-8
  • $suffix=true:是否在截取后的字符后面显示省略号,默认true显示,false为不显示

 

【Thinkphp】解决Function get_magic_quotes_gpc() is deprecated问题

在最新版的Wamp搭建web环境的时候,用thinkphp开发项目就会出现一个“Deprecated: Function get_magic_quotes_gpc() is deprecated”的提示警告,请看如下截图:

20131230105613

 

经“度娘”一查,发现php版本高了,而get_magic_quotes_gpc() 这个函数在所使用的php版本中弃用了。

20131230105845

 

解决方法:

找到使用该函数的文件: ThinkPHP\Common\runtime.php

//   系统信息
if(version_compare(PHP_VERSION,'5.4.0','<')) {
    ini_set('magic_quotes_runtime',0);
    define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc()?True:False);
}else{
    define('MAGIC_QUOTES_GPC',false);
}

修改为如下:

//   系统信息
if(version_compare(PHP_VERSION,'5.4.0','<')) {
    //ini_set('magic_quotes_runtime',0);
    //define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc()?True:False);
    define('MAGIC_QUOTES_GPC',ini_set("magic_quotes_runtime",0)?True:False);
}else{
    define('MAGIC_QUOTES_GPC',false);
}

效果:

20131230110653

 

【thinkphp】解决IF标签变量与变量比较出现的问题

在用thinkphp写项目的时候,发现一个问题:foreach标签循环显示数据时,如果在该标签中需要用到IF标签来判断就会出现问题,请看如下代码:

<if condition="$id < 5 ">
value1
<else /> 
value2
</if>

这种方式是不会出问题,但是遇到二位数组变量或者三维数组变量比较的时候,就会对比不出来,请看代码:

<foreach name="datas.cats_datas" item="cats">
       <option value="{$cats.cat_id}" <if condition="$datas.datas.cat_id eq $cats.cat_id ">selected="selected"</if> >{$cats.cat_name}</option>
</foreach>

 解决方法:

<foreach name="datas.cats_datas" item="cats">
        <option value="{$cats.cat_id}" <if condition="$datas['datas']['cat_id'] eq $cats['cat_id'] ">selected="selected"</if> >{$cats.cat_name}</option>
</foreach>

 原因:

第一层标签以下不支持$a.name这种点的写法,所以大家尽量使用$a[‘name’]这种。

【thinkphp】模板的使用技巧

一、模板包含

<include file="完整模板文件名" />
		<include file="./Tpl/default/Public/header.html" />
		<include file="read" />
		<include file="Public:header" />
		<include file="blue:User:read" />
		<include file="$tplName" />
		<include file="header" title="ThinkPHP框架"keywords="开源WEB开发框架"/>
		在模板中变量用[变量]接受
		<include file='file1,file2' />

 

二、模板渲染

1、自动开启模板渲染 设置配置文件
			'LAYOUT_ON'=>true,//开启模板渲染
			准备一个模板渲染页面,在页面中使用{__CONTENT__}接受具体模板页面的内容
			如果在摸一个具体模板中不希望使用渲染模板,可以在页首添加{__NOCONTENT__}
	2、不开启自动模板渲染可以在每一个具体页面的页首添加
		<layout name='layout'/>
	3.使用技巧
		在渲染模板文件中也可以使用其他模板文件的内容
		<include file='Public:header'/>
		<body>
			<p>这里是渲染页面!!!</p>
			{__CONTENT__}
		</body>
	</html>

 

三、模板的继承

【thinkphp】模板中的基本语法

一、导入CSS和JS文件

1、css link
	   js  scr
		<link rel='stylesheet' type='text/css' href='__PUBLIC__/Css/test.css'/>
		<script src='__PUBLIC__/Js/test.js'></script>
	2.import
		<import type='js' file='Js.test' /> //导入Public文件夹下面的Js目录中的test.js文件,import标签可以省略type属性,默认就是js的
		<import type='css' file='Css.test' />
		//可以更改默认文件夹 设置basepath属性
		<import type='js' file='Js.my' basepath='./Other'/>
	3.load
		//方法可以自动检测导入的文件类型
		<load href='__PUBLIC__/Js/test.js' />

 

二、分支结构

1、if	
		<if condition='$sex eq "男"'>
			男人是泥巴做的
			<else />
			女人是水做的
		</if>

		<if condition='$age lt 18'>
			未成年
			<elseif  condition='$age eq 18'/>
			青春年少
			<else />
			成年
		</if>
		>  gt
		<  lt
		== eq
		<= elt
		>= egt
		!= neq
		=== heq
		!== nheq

		<switch name='number'>
			<case value='1'>一个和尚挑水吃</case>
			<case value='2'>两个和尚台水吃</case>
			<case value='3'>三个和尚没水吃</case>
			<default/> 这里是默认值
		</switch>
三、循环结构
	1.for
		<table border='1' width='500'>
			<for start='10' end='00' name='j' step='-2' comparison='gt'>
				<tr><td>{$j}</td><td>abc</td></tr>
			</for>
		</table>

	2.volist
		<volist name='list' id='v'>
			{$v.username}<br/>
		</volist>
	3.foreach
		<foreach name='list' item='v' key='k'>
			{$k}-------{$v}<br/>
		</foreach>

 

四、特殊标签

1、比较标签
			eq或者 equal 等于 
			neq 或者notequal 不等于 
			gt 大于 
			egt 大于等于 
			lt 小于 
			elt 小于等于 
			heq 恒等于 
			nheq 不恒等于 

	2.范围标签
		in      
				<in name='n' value='9,10,11,12'>在这些数字里面<else/>不在这些数字的范围内</in>
		between
				<notbetween name='n' value='1,10'>{$n}在1-10之间<else/>{$n}不在1到10之间</between>
	3.present
		标签来判断模板变量是否已经赋值,
		<present name='m'>m有赋值<else/>m没有赋值</present>
	4.Empty
		empty标签判断模板变量是否为空,
		<empty name='n'>n为空赋值<else/>n有值</empty>
	5.Defined 
		判断常量是否已经定义
	6.Define
		在模板中定义常量
	7.Assing
		模板中变量赋值

 

五、其他标签使用

在模板中直接使用PHP代码
		<php> echo "我是赵桐正" </php>

 

【thinkphp】模板中的变量

一、变量输出

1.标量输出
		2.数组输出
				{$name[1]}
				{$name['k2']}
				{$name.k1}
		3.对象输出
				{$name:k}
				{$name->k}

二、系统变量

{$Think.get.id}

三、使用函数

{$name|strtoupper} 生成的编译后文件是 <?php echo (strtoupper($name)); ?>
		{$name|date='Y m d H:i:s',###}

四、默认值

{$name|default='这里是默认值'}

五、运算符

+ - * / % ++ --
		{$name++}

【thinkphp】视图介绍

一、模板的使用  

a、规则
		模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和模块名同名的文件夹[Index]/和方法名同名的文件[index].html(.tpl)
		更换模板文件的后缀名(修改配置文件)
		'TMPL_TEMPLATE_SUFFIX'=>'.html',//更改模板文件后缀名
	b、修改模板文件目录层次
		'TMPL_FILE_DEPR'=>'_',//修改模板文件目录层次
	c、模板主题
		'DEFAULT_THEME'=>'your',//设置默认模板主题
		需要在TPL下面新建一个your文件夹作为模板主题文件夹
		如何动态修改模板主题?
		1、在后台准备一个功能,修改config.php文件中的默认模板项
		2、通过url传递 t=主题 参数可以修改不同的模板
			'DEFAULT_THEME'=>'your',//设置默认模板主题
			'TMPL_DETECT_THEME'=>true,//自动侦测模板主题
			'THEME_LIST'=>'your,my',//支持的模板主题列表

二、输出模板内容 

a、display
		1.display中没有参数
			$this->display();
		2.可以带参数
			$this->display(本模块文件夹下的其他模板文件);
			$this->display('index2');

			$this->display(其他文件夹下的模板文件);
			$this->display('Public:error');//注意,仅仅需要在Tpl下有Public文件夹以及其中的error.html即可,不需要一定有Public模块

			$this->display(其他主题下的 文件夹下的 模板文件);//需要开启主题支持
			$this->display('my:Index:index');

			$this->display(一个url路径);
			$this->display('./Public/error.html');

			$this->display('./Public/error.html','utf-8','text/xml');

			$this->show($content);
		3.fetch方法
			获得模板文件中的内容,以字符串形式返回
			$content=$this->fetch('Public:error');
		4.show方法
			不需要模板文件,可以直接输出模板内容
				$content=$this->fetch('Public:error');
				dump($content);
				$content=str_replace('h1','i',$content);
				$this->show($content);

三、模板中的赋值  

//$this->assign('name','赵桐正');
		$this->name='赵桐正2';
		$this->display();

四、模板替换 

__PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/
__ROOT__: 会替换成当前网站的地址(不含域名) 
__APP__: 会替换成当前项目的URL地址 (不含域名)
__GROUP__:会替换成当前分组的URL地址 (不含域名)
__URL__: 会替换成当前模块的URL地址(不含域名)
__ACTION__:会替换成当前操作的URL地址 (不含域名)
__SELF__: 会替换成当前的页面URL

更换模板变量规则,修改配置项
		'TMPL_PARSE_STRING'=>array(           //添加自己的模板变量规则
		'__CSS__'=>__ROOT__.'/Public/Css',
		'__JS__'=>__ROOT__.'/Public/Js',
	),

【thinkphp】查询方式

普通查询方式

a、字符串
		$arr=$m->where("sex=0 and username='gege'")->find();
	b、数组
		$data['sex']=0;
		$data['username']='gege';
		$arr=$m->where($data)->find();
		注意:这种方式默认是and的关系,如果使用or关系,需要添加数组值
		$data['sex']=0;
		$data['username']='gege';
		$data['_logic']='or';

 

表达式查询方式

$data['id']=array('lt',6);
		$arr=$m->where($data)->select();
		EQ 等于
		NEQ不等于
		GT 大于
		EGT大于等于
		LT 小于
		ELT小于等于
		LIKE 模糊查询
			$data['username']=array('like','%ge');
			$arr=$m->where($data)->select();
		NOTLIKE
			$data['username']=array('notlike','%ge%'); //notlike中间没有空格
		    $arr=$m->where($data)->select();

			注意:如果一个字段要匹配多个通配符
			$data['username']=array('like',array('%ge%','%2%','%五%'),'and');//如果没有第三个值,默认关系是or关系
			$arr=$m->where($data)->select();
		BETWEEN
			$data['id']=array('between',array(5,7));
			$arr=$m->where($data)->select();
			//SELECT * FROM `tp_user` WHERE ( (`id` BETWEEN 5 AND 7 ) )
			$data['id']=array('not between',array(5,7));//注意,not 和 between中间一定要有空格
			$arr=$m->where($data)->select();
		IN
			$data['id']=array('in',array(4,6,7));
			$arr=$m->where($data)->select();
			//SELECT * FROM `tp_user` WHERE ( `id` IN (4,6,7) )

			$data['id']=array('not in',array(4,6,7));
			$arr=$m->where($data)->select();
			//SELECT * FROM `tp_user` WHERE ( `id` NOT IN (4,6,7) )

 

区间查询

$data['id']=array(array('gt',4),array('lt',10));//默认关系是 and 的关系
		//SELECT * FROM `tp_user` WHERE ( (`id` > 4) AND (`id` < 10) ) 

		$data['id']=array(array('gt',4),array('lt',10),'or') //关系就是or的关系

		$data['name']=array(array('like','%2%'),array('like','%五%'),'gege','or');

 

统计查询

count //获取个数
		max   //获取最大数
		min   //获取最小数
		avg   //获取平均数
		sum   //获取总和

 

SQL直接查询

a、query 主要数处理读取数据的
		成功返回数据的结果集
		失败返回boolean false
		$m=M();
		$result=$m->query("select *  from t_user where id >50");
		var_dump($result);
	b、execute 用于更新个写入操作
		成功返回影响行数
		失败返回boolean false
		$m=M();
		$result=$m->execute("insert into t_user(`username`) values('ztz3')");
		var_dump($result);

 

【thinkphp】CURD介绍

读取数据

对数据的读取 Read
	$m=new Model('User');
	$m=M('User');
	select
	$m->select();//获取所有数据,以数组形式返回
	find
	$m->find($id);//获取单条数据
	getField(字段名)//获取一个具体的字段值
	$arr=$m->where('id=2')->getField('username');

 

创建数据

对数据的添加 Create
	$m=new Model('User');
	$m=M('User');
	$m->字段名=值
	$m->add();
	返回值是新增的id号

 

删除数据

$m=M('User');
	$m->delete(2);               //删除id为2的数据
	$m->where('id=2')->delete(); //与上面效果相同,也是删除id为2的数据
	返回值是受影响行数

 

更新数据

$m=M('User');
	$data['id']=1;
	$data['username']='ztz2';
	$m->save($data);             
	返回值是受影响行数