项目技巧

来源:互联网 发布: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['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 为表单的 name
array('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%"









0 0
原创粉丝点击