项目技巧
来源:互联网 发布:mac团灭 编辑:程序博客网 时间:2024/06/07 01:49
1. css
在 /thinkphp/Public/Css/basic.css
*{
padding: 0;
margin: 0;
}
然后每个页面创建一个 自己的 css 文件
/thinkphp/Public/Css/Home/login.css
页面中调用:
<load href='__PUBLIC__/Css/basic.css'/>
<load href='__PUBLIC__/Css/Home/login.css'/>
2.jquery 运用
$(function(){
$('img[title="login"]').click(function(){
$('form[name="myForm"]').submit();
});
});
$(function(){
var error=new Array();
$('input[name="username"]').blur(function(){
var username=$(this).val();
$.get('__URL__/checkName',{'username':username},function(jdata){
if(data=='不允许注册'){
error['username']=1;
$('input[name="username"]').after('<p id="umessage">该用户名已经注册</p>');
}else{
error['username']=0;
$('#umessage').remove();
}
});
$('img.register').click(function(){
if(error['username']==1){
return false;
}else{
$('form[name="myForm"]').submit();
}
});
});
});
public function checkName(){
$username=$_GET['username'];
$user=M('User');
$where['username']=$username;
$count=$user->where($where)->count();
if($count){
echo '不允许注册';
}else{
echo '允许注册';
}
}
3.session 运用
添加session:
$user=M('User');
$where['username']=$username;
$where['username']=$username;
$where['password']=$password;
$arr=$user->field('id')->where($where)->find();
if($arr){
$_SESSION['username']=$username;
$_SESSION['id']=$arr['id'];
}
删除session:
$_SESSION=array();
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),'',time()-1,'/');//最后一个值 让全局有效
}
session_destroy();
$this->redirect('Index/index');
退出的时候如果是分帧效果,那么需要在 该页面设置 target='_top'
4.exit 退出方法
5.使用分帧
<frameset rows='20%,*'>
<frame src='__URL__/top' name='top' />
<frameset cols='50%,50%'>
<frame src='__URL__/left' name='left' />
<frame src='__URL__/right' name='right' />
</frameset>
</frameset>
6.前端页面获取 session 值
<{$Think.session.username}>
7.css 样式位置
margin-top:0
position:relative;
top:5px;
8.创建自定义的标签驱动
在 \thinkphp\ThinkPHP\Extend\Driver\TagLib 下面创建
TagLibMessage.class.php
<?php
class TagLibMessage extends TagLib{
protected $tags = array(
'code'=>array('attr'=>'width,height','close'=>0);
);
public function _code($attr) {
$tag = $this->parseXmlAttr($attr,'code');$width = $tag['width'];$height = $tag['height'];$str = "<img src='__APP__/Public/code?w={$width}&h={$height}' onclick='this.src=this.src+\"?\"+Math.random' />";return $str;}
}
?>
在页面最上面添加
<taglib name='Message' /> 引入标签库
使用
<Message:code width='30' height='30' /> Message标签下的 code 标签
9.访问模块的时候有一个首先访问的模块方法_initialize()
在 /Lib/Action 中创建 CommonAction.class.php
<?php
class CommonAction extends Action{
Public function _initialize(){
// 初始化的时候检查用户权限
if(!isset($_SESSION['username']) || $_SESSION['username']!=''){
$this->redirect('Login/login');
}
}
}
?>
那么别的 Action 创建好之后可以都继承 该Action 类
class IndexAction extends CommonAction {}
10.三大自动化
一、自动创建
// 实例化User模型$User = M('User');// 根据表单提交的POST数据创建数据对象$User->create();// 把创建的数据对象写入数据库$User->add();
二、自动验证
array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间])
在 /Lib/Model 下面创建自定义的 Model
UserModel.class.php
<?php
class UserModel extends Model{
protected $_validate = array(array('code','require','验证码必须!'), //默认情况下用正则进行验证 code 为表单的 namearray('code','checkCode','验证码错误',0,'callback',1),array('username','','帐号名称已经存在!',0,'unique',1), // 在新增的时候验证name字段是否唯一array('value',array(1,2,3),'值的范围不正确!',2,'in'), // 当值不为空的时候判断是否在一个范围内array('repassword','password','确认密码不正确',0,'confirm'), // 验证确认密码是否和密码一致array('password','checkPwd','密码格式不正确',0,'function'), // 自定义函数验证密码格式array('username','/^\w{6,}$/','用户名必须6个字母以上',0,'regex',1),);protected function checkCode($code){if(md5($code)!=$_SESSION['code']){return false;}else{return true;}}
}
?>
用的时候
$user=D('User');
if(!$user->create()){
$this->error($user->getError());
}
三、自动完成
array(填充字段,填充内容,[填充条件,附加规则])
Lib/Model/下面创建 MessageModel.class.php
<?php
class MessageModel extends Model{
protected $_auto=array(
array('create_time','time',1,'function'),
array('uid','getUid',1,'callback'),
);
protected function getUid(){
return $_SESSION['id'];
}
}
?>
使用:
$message=D('Message');
11.文件上传
<form action='' method='post' enctype='multipart/form-data'>
<input type='file' name='filename'/>
</form>
Public function upload(){
import('ORG.Net.UploadFile');$upload = new UploadFile();// 实例化上传类$upload->maxSize = 3145728 ;// 设置附件上传大小$upload->allowExts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型$upload->savePath = './Public/Uploads/';// 设置附件上传目录if(!$upload->upload()) {// 上传错误提示错误信息$this->error($upload->getErrorMsg());}else{// 上传成功 获取上传文件信息$info = $upload->getUploadFileInfo();}
// 保存表单数据 包括附件数据$User = M("User"); // 实例化User对象$User->create(); // 创建数据对象$User->photo = $info[0]['savename']; // 保存上传的照片根据需要自行组装$User->add(); // 写入用户数据到数据库$this->success('数据保存成功!');
}
12.关联模型
将每个 Message 中的 uid 所对应的用户查出来,可以修改 MessageModel.class.php
<?php
class MessageModel extends RelationModel{
protected $_auto=array(
array('create_time','time',1,'function'),
array('uid','getUid',1,'callback'),
);
protected $_link=array(
'Dept'=> array(
'mapping_type'=>BELONGS_TO, //关系
'class_name'=>'User', //类名
'foreign_key'=>'uid', //外键
'mapping_name'=>'user', //映射名
//'mapping_fields'=>'username',//指定想要的字段
//'as_fields'=>'username:uname',//指定 username 跟 user 平级 后面的 :uname 是使得整个字段跟前面获取的字段名字不一样
),
);
protected function getUid(){
return $_SESSION['id'];
}
}
?>
Action 中 IndexAction.class.php
public function getMessage(){
$message=D('Message');
$arr=$message->relation('User')->select();
//$arr=$message->relation(true)->select(); 所有关联的表都获取
$this->assign('list',$arr);
$this->display();
}
13.分页
import('ORG.Util.Page');//导入分页类
$count=$message->count();//获取数据总数
$page=new Page($count,2);//实例化分页类 传入总记录数和每页显示的记录数
$show=$page->show();//分页显示输出
$arr=$message->relation('User')->limit($page->firstRow.','.$page->listRows)->select();//进行分页数据查询 注意limit方法的参数要使用Page类的属性
$this->assign('list',$arr);
$this->assign('show',$show);
$this->display();
设置分页类的信息输出,必须放在 $page->show() 方法之前
$page->setConfig('header','个会员');
header:头部描述信息,默认值 “条记录”
prev:上一页描述信息,默认值是“上一页”
next:下一页描述信息,默认值是“下一页”
first:第一页描述信息,默认值是“第一页”
last:最后一页描述信息,默认值是“最后一页”
theme :分页主题描述信息,包括了上面所有元素的组合 ,设置该属性可以改变分页的各个单元的显示位置,默认值是
"%totalRow% %header% %nowPage%/%totalPage% 页 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%"
prev:上一页描述信息,默认值是“上一页”
next:下一页描述信息,默认值是“下一页”
first:第一页描述信息,默认值是“第一页”
last:最后一页描述信息,默认值是“最后一页”
theme :分页主题描述信息,包括了上面所有元素的组合 ,设置该属性可以改变分页的各个单元的显示位置,默认值是
"%totalRow% %header% %nowPage%/%totalPage% 页 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%"
0 0
- 项目技巧
- 项目篇 - 项目技巧
- 项目计划技巧
- 项目计划技巧
- 软件项目规划技巧
- 做项目的技巧
- 项目心得-技巧感言
- extjs项目技巧
- 项目小技巧
- 精简点名项目技巧
- 项目配置技巧
- 项目开发技巧
- 项目技巧笔记
- 项目阅读技巧
- 项目开发技巧之交涉技巧
- 项目中的oracle开发技巧
- 项目中的oracle开发技巧
- 项目中的oracle开发技巧
- 控制器的模块和操作
- Android 百度地图sdk 标注图marker中可以切换显示不同内容
- URL
- 分组、页面跳转与ajax
- 九、Go语言库之strconv包--GO语言笔记
- 项目技巧
- atoi()函数自实现
- 中序线索二叉树(Java)
- 上传 mp3,mp4文件
- 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 类似于图中效果
- SAM数据格式学习2之FLAG理解
- iOS中tabbar标题设置和导航条标题冲突的问题
- 多文件上传
- Android 体系架构图片