开发的一些建议

浏览:890 发布日期:2014/04/18 分类:技术分享
版本的选择

目前分了 3.1和3.2版本,是不能直接升级到3.2的,3.2完全基于5.3以上版本,代码风格什么的都改变了,最大的就是应用了“命名空间”的概念。我之前是做C#开发的所以对于我一点也不陌生,而且很坚持的支持这样的升级,但是目前PHP的这种命名空间还不是很顺手,根据版本命名来看应该是个过度版本。等下一次调整吧。

不要使用内置的分页

建议不要使用TP内置的分页,内置的分页把HTML也封装到里面了,虽然也可以随意修改HTML模板,但是该死的URL居然是拼接来的,这限制了使用场景,其实利用模型的page很容易就可以自己封装一个分页的,而我自己根本就没把分页封装,直接暴露出来然后包含一个文件,直接在HTML里面拼装分页,很灵活。

模型实例时请使用D方法

官方说M方法快速高效但D方法才可以使用一些高级的特性,例如在model中自己定义的一些方面必须通过D方法之后才可以调用,

为每个模型建立类文件

即是为每一张表建立xxxModle.class.php,这样做虽然很麻烦但是实际过程中很有用,我个人习惯建一个公共的模型文件CommonModel.class.php,内置 _list_和 getOne方法,<?php
class CommonModel extends Model {
    public function _list_($map = array() ,$page = 1,$limit = 16, $orderby = "id desc"){
        $list['count'] = $this->where($map)->count('id');
        $list['page'] = $page;
        $list['map'] = $map;
        $list['limit'] = $limit;
        $pagecount = ceil($list['count'] / $list['limit']);
        if ($pagecount < 1) $pagecount =1;
        $list['pagecount'] = $pagecount;
        $vlist = $this->where($map)->page($page,$limit)->order("$orderby ")->select();
        $vvlist = array();
        foreach ($vlist as $k) {
            if (method_exists($this, 'ckvo')) {
                $vvlist[] = $this->ckvo($k);
            }else{
                $vvlist[] = $k;
            }
        }
        $list['volist'] = $vvlist;
        return $list;
    }
    public function getOne($map='')
    {
        $vo = $this->where($map)->order('id desc')->find();
        if (method_exists($this, 'ckvo')) {
            $vo = $this->ckvo($vo);
        }
        return $vo;
    }
}
?>
使用了page方法,并且返回了分页所有必须的参数,这里还建议尽量不要使用TP的关联方法,这里我用ckvo方法代替了,public function ckvo($vo='')
    {
        if (!$vo) return;
        $Comment = D('Comment');
        $comment = $Comment->getAll($vo['id'],'Info');
        if ($comment) {
            $vo['Comment'] = $comment;
        }
        return $vo;
    }
这样虽然多次查询了,但并不比TP的联合查询性能差,其实最终mysql解析两者原理都一样的,关键是这样我可以任意组合也更方面查询。public function ckvo($vo = '')
    {
        if (!$vo) return;
        $LotteryItem = M('LotteryItem');
        $map['lid'] = $vo['id'];
        $vlist = $LotteryItem->where($map)->select();
        for ($i=0; $i < 6; $i++) { 
            $vo['Item'][$i] = $vlist[$i];
        }
        if ($vo['status'] == 0) 
            $vo['status_text'] = "未开始";
        elseif ($vo['status'] == 1) 
            $vo['status_text'] = "报名中";
        elseif ($vo['status'] == 2) 
            $vo['status_text'] = "抽奖中";
        elseif ($vo['status'] == 3) 
            $vo['status_text'] = "抽奖结束";
        return $vo;
    }
后台请使用普通URL模式

如果后台没有其他需求,请使用平台URL模式即设置 URL_MODEL = 0,一般做URL优化是更好的方便收录,但后台都不想被收录吧,这还不是最主要的,自定义模式的URL(非平台模式)在结合前端开发的时候带来很大的困扰,例如默写时候需要jq对URL解析就很不方便判断了,并且我发现在设置cookies的时候也会有路径的问题(所以导致内置的cookie很不好使)总之尽量使用普通URL模式。
最佳答案
评论( 相关
后面还有条评论,点击查看>>