2014年11月30日星期日

ThinkPHP3.1.3笔记

<?php
return array_merge($arr1,$arr2);//合并数组,合并后的数组以第二个数组名为名;
?>

自动加载函数库与扩展函数库定义、模板显视与模板替换配置项;
自定义p函数,格式化打印;
在/Commmon中建立common.php文件;写 代码
必须是common.php才能被认为是内部函数,可以自动加载;
<?php
function p($array){
dump($array,1,'<pre>',0);

}
?>
如果想自动加载common以外的函数,需要在config.php中定义一个选项:
<?php
$config=array(
'LOAD_EXT_FILE'=>'function',
)
return array_merge(include './Conf/config.php',$config);
?>

使用$this->display();调用模版;
模版放在当前项目的TPL目录下;
模版名必须以方法名称命名;放在相应的控制器目录下;
CSS,js,图片放在根目录下public目录内;
__PUBLIC__表示public目录;例:
<script type="text/javascript" src='__PUBLIC__/jquery1.3.js'></script>

更改__PUBLIC__地址:
在配置文件中添加一个选项;
'TMPL_parse_string'=>array(
'__PUBLIC__'=>__ROOT__.'/'.APP_NAME.'Tpl/Public',
),
即把__PUBLIC映射到根目录下的项目文件夹内的TPL/Public;

U函数的使用:详见手册!!
U();生成URL地址;
echo U('Index/index',array('uid'=>1,'username'=>'admin')); //程序会加上伪静态后缀;后面的array可选,用来传递参数;
//在入口文件index.php后加上Index/index/uid/1/username/admin.html

配置文件中配置伪静态后缀;
'URL_HTML_SUFFIX'=>'.html',
display()函数,默认取方法的名称再加上一个.html;得到模版名;
如果要指定模版,可以给display()加上一个参数即可;如:
display('wish');//不需要加上.html;

如果后缀名不是.html,那么需要修改配置文件;
'TMPL_TEMPLATE_SUFFIX'=>'.htm';

I函数自动获取$_GET或$_POST的参数;
如:echo I('uid');
<?php
print_r(I('post.'));
print_r(I('get.'));
?>

第9课-应用分组部署及共用项与独立项详解

应用分组可以让前后台共用配置、函数等:
index.php

<?php
define ('APP_NAME','App');
define ('APP_PATH','./App/');
define ('APP_DEBUG',TURE);
require '/ThinkPHP/ThinkPHP.php';
?>

config.php
<?php
return array(
'APP_GROUP_LIST'=>'Index,Admin',
'DEFALUT_GROUP'=>'Index',
//需要在Lib/Action下建立每个项目对应的文件夹;再建立相应的控制器;
//如 IndexAction.class.php,
//AdminAction.class.php
);
//在Conf目录下建立项目文件夹,再建立config.php文件为项目私有的配置文件;
//分别在Common目录下都分别建立项目文件夹,再建立function.php 为项目各自私用的函数文件;
//TPL模版文件夹下也要分别建立项目文件夹,如Admin,Index;
?>

第10课 判断是否Ajax提交与错误页面定制

异步处理ajax;
在模版中使用javascript定义一个全局变量,然后给JS中使用;
<script>
var handleUrl='{:U("Index/Index/handle",'','')}'
//
</script>
js代码:
$('$send-btn').click(function){
var username=$('input[name=username]').val();
var content=$('textarea[name=content]').val();

if (username==''){
alert('usernmae not null');
username.focus();
return;
}
if(content.val()==''){
alert('content not found');
content.focus();
return;

}
//开始异步
$.post(handleUrl,{username:username.val(),content:content.val()}.function(data){
if(data.status){
var str='<dl class="paper a1"';
str +='<dt><span class="username">'+data.usernae='</span>';
str +='<span class="num">'+data.id+'</span>';
str +='</dt><dd class="content">'+data.content+'</dd>';
str +='<dd class="bottom">;
str+=<span class="time">'+
data.time +'</span>';
str+='<a href="" class=""close""></a></dd></dl>';
$('#main').append(str); //添加str到HTML文件ID为main的结构后面;
$('#close').click(); //关闭发布窗口;
}else{
alert('publish faild');
}
} ;

在IndexAction.class.php中写入;
<?php
Public function handle(){
echo (I('post.')); //输出I函数获取的post数据;同样有I('get.')

//下面是判断是否异步
Public function handle(){
if(!IS_AJAX) halt('page not found');
echo I('post.');
}
?>

定制前台错误页面halt错误;
Conf/Index/config.php
<?php
return array(
'TMPL_EXCEPTION_FILE'=>'./Public/Tpl/error.html'
)
?>
然后可以在模板中这样输出
<?php echo $e['message'];?>

第11课F函数的使用与ajaxReturn方法
使用jquery来异步?

在配置文件中加入默认过滤函数:
<?php
return array(
'DEFAULT_FILTER'=>'htmlspecialchars',
)

IndexAction.class.php中的代码;
<?php
Public function index(){
$wish=M('wish')->select();
$this->assign('wish',$wish)->display();

}

Public function handle(){
if(!IS_AJAX) halt('page not found');
$data=array(
'username'=>I('username'),
'content'=>I('content'),
'time'=>time(),
);

if(M('wish')->data($data)->add()){
$data['id']=$id;
$data['content']=replace_phiz($data['content']);
$data['time']=date('y-m-d H:i',$data['time']);
$data['status']=1;
$this->ajaxReturn($data,'json');
}else{
$this->ajaxReturn(array('status'=>0),'json');
}
//替换表情:定义数组,
$phiz=array(
'zhuakuang'=>'抓狂',
'baobao'=>'抱抱',
'kaixin'=>'开心',
);
$phiz=F('phiz', $phiz,'./Data/');
//F方法生成文件(这里是用数组生成), 用来做缓存的? 看看手册;
//查看一下file_put_content(),var_export()函数,

$phiz=F('phiz','','./Data/');//读文件;读/data/phiz.php;

//表情替换的函数,可以放在comon.php中
//如下:
function replace_phiz($content){
preg_match_all('/\[.*?\]/is',$content,$arr);
if($arr[0]){
$phiz=F('phiz','','/Data/')
foreach($arr[0] as $v){
foreach($phiz as $key => $value){
if($v=='['.$value.']'){
$content=str_replace($v,'<img src="'.__ROOT__'/Public/Image/phiz/'.$key.'.gif"/>',$content);

}
continue;
}
}
}
return $content;
}
}
?>

2014年11月17日星期一

SXBK Gravatar 头像都要被墙

因为工作和身份的原因,最近都好少更新博客和网站,前几天就发现在头像打不开,也没有在意,心想可能是服务器的原因吧,过段时间就好了。。。
结果不曾想居然是被伟大的GFW给墙了。。。还好找到了一个简单的方法,用gravatar的朋友不妨试一下:

方法来自:http://fatesinger.com/74030

https还是没被墙的,而且速度还不错,直接调用这个最简单了。

如果你的网站启用了ssl则不需要了,否则functions.php 加入如下代码

function get_ssl_avatar($avatar) {
$avatar = preg_replace('/.*\/avatar\/(.*)\?s=([\d]+)&.*/','<img src="https://secure.gravatar.com/avatar/$1?s=$2" class="avatar avatar-$2" height="$2" width="$2">',$avatar);
return $avatar;
}
add_filter('get_avatar', 'get_ssl_avatar');