最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 专家动态页面的实现——php基于CI框架的学习(二)

    正文概述 转载于:掘金(代码的边城7)   2021-04-09   541

    以下是本次学习的页面
    专家动态页面的实现——php基于CI框架的学习(二)

    打开相关文件,整个定义了一个Expert类

    class Expert extends CI_Controller{}
    

    在Expert类里定义了几个参数以及说明其使用了哪些model

    function \_\_construct() {
        $this->whitelist = "index";
        parent::\_\_construct (  );
        $this->load->model ( 'category\_model' );
        $this->load->model ( "expert\_model" );}
    

    然后我们看function index() 里的代码,一行行看下来

    $navtitle = "问题专家";
    $cid = intval ( $this->uri->segment ( 3 ) ) ? $this->uri->segment ( 3 ) : 'all'; //分类id$status = null!== $this->uri->segment ( 4 ) ? $this->uri->segment ( 4 ) : 'all'; //排序
    

    专家动态页面的实现——php基于CI框架的学习(二) 可以在页面中一一对应

    if ($cid != 'all') {
        $category = $this->category \[$cid\]; //得到分类信息
        $navtitle = $category \['name'\] . "专家列表";
        $cfield = 'cid' . $category \['grade'\];//获取分类的等级}
    

    第二行语句有点难以理解,选中后面的category查看引用,可以发现当前category是来自System/core目录下文件controller.php的全局变量。

    private static $instance;
    var $cache;
    var $currentuid = array ();
    var $setting = array ();
    var $category = array ();
    var $usergroup = array ();
    var $whitelist;
    var $time;var $ip;
    

    同时再选中$category右键查看快速引用,会找到下面几行代码

    $this->load->database ();$category = $this->category = $this->cache->load ( 'category', 'id', 'displayorder' );
    

    访问缓存数据,通过load()获取数据库里,名字为“category”的数据表里的id和displayorder字段的数据,以下是load函数的源代码

    专家动态页面的实现——php基于CI框架的学习(二)

    注意: 数据访问之前,会先通过下面的函数从缓存里访问数据,如果失败就会自动去读取数据然后写入缓存

    function fromcache($cachename,$cachetime = 3){}
    

    总之,由上方可以得出全局变量$category中读取的是数据库某条数据,源代码

    $category = $this->category [$cid]; //得到分类信息
    

    意为:Expert新定义的$category 为 db.category.id = cid 的整条数据库的信息

    //上接源代码,即$cid == 'all'的情况  
    else {  
        $category \['name'\] = '';
        $category \['id'\] = 'all';
        $cfield = '';
        $category \['pid'\] = 0;
    }
    if ($cid != 'all') 
        $category = $this->category\_model->get ( $cid );
    $sublist = $this->category\_model->list\_by\_cid\_pid ( $cid, $category \['pid'\] ); //获取子分类
    

    此段代码包含的函数:

    this>category_model>get(this->category\_model->get ( this−>category_model−>get(cid );

    该方法里包括了还包括了一个通过cid的值在数据表catagory里获取分类封面图的方法

    专家动态页面的实现——php基于CI框架的学习(二)

    专家动态页面的实现——php基于CI框架的学习(二) this>category_model>list_by_cid_pid(this->category\_model->list\_by\_cid\_pid ( this−>category_model−>list_by_cid_pid(cid, $category [‘pid’] )

    function list\_by\_cid\_pid($cid, $pid) {
        $cid=intval($cid);
        $pid=intval($pid);
        $sublist = array ();
        //把cid,pid值等于'all'的分类设置为平级的分类
        if ($cid == 'all') {
            $cid = 0;
        }
        if ($pid == 'all') {
            $pid = 0;
        }
        $where=" and onlybackground!=1 ";
        
        //在数据表里寻找与函数参数pid相同的分类id
        //使pid分类为id的子分类
        $query = $this->db->query ( "select \* from " . $this->db->dbprefix . "category where pid=$cid and isuseask=1 $where order by displayorder asc,id asc" );
        
        //给子分类添加封面缩略图和大图
        foreach ( $query->result\_array () as $category ) {
            $category \['image'\] = get\_cid\_dir ( $category \['id'\], 'big' );
            $category \['bigimage'\] = get\_cid\_dir ( $category \['id'\], 'big' );
            $sublist \[\] = $category;
        }
        return $sublist;}
    

    我们可以访问相关的数据库来

    几个分类之间等级关系在这里

    专家动态页面的实现——php基于CI框架的学习(二)

    专家动态页面的实现——php基于CI框架的学习(二)

    专家动态页面的实现——php基于CI框架的学习(二)

    我们发现默认分类下面没有子分类,计算机分类下面有PHP,结合数据表就能得知,分类A的pid属性值等于某分类B的id值,那么分类A就是分类B的子分类,除子分类外,其他分类平级

    然后我们再去查看该函数在浏览界面显示子分类的原理,我们就能更好地理解地源码了

    //判断网页是否是付费内容
    $orderwhere = '';
    switch ($status) {
        case 'all' : //全部
            $orderwhere = '';
            break;
        case '1' : //付费
            $orderwhere = ' and mypay>0 ';
            break;
        case '2' : //免费
            $orderwhere = " and mypay=0 ";
            break;
        default:
            $orderwhere = '';
            break;
    }
    
    $page = max ( 1, intval ( $this->uri->segment ( 5 ) ) );
    $pagesize = $this->setting \['list\_default'\];$startindex = ($page - 1) \* $pagesize;
    

    **page=max(1,intval(page = max ( 1, intval ( page=max(1,intval(this->uri->segment ( 5 ) ) );
    **令当前页面的page为$this->uri->segment ( 5 )返回的整数值,如果不存在该地址就返回1,此网页返回1,因为最多只有四个分页

    **pagesize=pagesize = pagesize=this->setting [‘list_default’];
    **setting同上文的$category一样,都是定义好的全局变量

    专家动态页面的实现——php基于CI框架的学习(二)

    setting存储的是数据库里的“setting”数据表在此出调用了字段 ‘ list_default ’ 的值,意为一张页面默认显示的列表数量为15条

    专家动态页面的实现——php基于CI框架的学习(二)

    **startindex=(startindex = (startindex=(page – 1) * $pagesize;
    **网页的起始页码设置,为当前页码减1,因为计算机计数是从0开始的

    //冗长的,本页面最后一个判断语句
    $rownum = $cid == 'all' ? returnarraynum ( $this->db->query ( getwheresql ( 'user', " expert=1 " . $orderwhere , $this->db->dbprefix ) )->row\_array () ) : returnarraynum ( $this->db->query ( getwheresql ( 'user', " expert=1 " . $orderwhere . "and uid IN (SELECT uid FROM " . $this->db->dbprefix . "user\_category WHERE cid=$cid)" , $this->db->dbprefix ) )->row\_array () );
    

    该语句中调用了以下方法 专家动态页面的实现——php基于CI框架的学习(二) 专家动态页面的实现——php基于CI框架的学习(二)

    大概意思为:

    当前cid = ‘all’时 查询数据表 user数据中,expert = 1 (代表是专家)的orderwhere 是不是免费的数量

    当前cid <> ‘all’时

    查询数据表 user数据中,expert = 1 (代表是专家)而且 user_category(用户认证的专家分类数据表).cid = 当前的cid ,这条数orderwhere 是不是免费的的数量

    //展示专家列表,get\_list获取user数据表所有专家用户id
    //并判断他是否认证,最后一次登陆时间,关注人数,被关注次数,个人擅长分类
    $expertlist = $this->expert\_model->get\_list ( 1, $startindex, $pagesize, $cid, $status );
    
    //通过page函数,以分类的id号,是否免费重新建立两个分页
    $departstr = page ( $rownum, $pagesize, $page, "expert/default/$cid/$status" );
    
    //使当前页面,每一页面最多可处理15条数据
    $questionlist = $this->expert\_model->get\_solves ( 0, 15 );
    
    //代码的页面实现include template ( 'expert' );
    

    起源地下载网 » 专家动态页面的实现——php基于CI框架的学习(二)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元