zoukankan      html  css  js  c++  java
  • pc标签 phpcms

    phpcms v9的pc标签如下

    {pc:content action="lists" cache="3600" num="20" return="$data" page="$page"}{/pc}

    这个pc后面的content是模块名,即之前文章提到的“m=”后面跟的值。即phpcms\modules\下的文件夹的名字,即模块,模块中的php文件为控制器,即mvc中的C;

    action跟的值其实是content模块中名为index.php的控制器的方法的名字,即之前文字提到的"a="一样,至于为啥没有明示index.php是因为若不写则默认为index,就像若"a"不写就默认访问的是"a=init"一样。

    cache是缓存。

    num是每一页显示多少条记录的意思。

    return是这条语句执行完返回的句柄或者说内容。

    page是分页,这个"$page"其实也可以改写成"$_GET['page']"因为它就是取的地址栏上你提交的你想查看的页码(默认是第一页)

    一般pc标签下会跟loop循环标签,取出返回的数据。

    最后phpcms会封装好一个不错的分页的导航条

    <div id="pages">{$pages}</div>

    例子:

    <!-- 第0-7篇文章 -->  
                {php $i=0;}  
                {pc:content action="lists"  catid="$catid"  limitt="0,7" order="id DESC"}  
                <ul class="erji_center_content">  
                    {loop $data $r}  
                    <li><a href="{$r[url]}">{$r[title]}</a></li>  
                    {/loop}  
                </ul>  
                <span class="border-cx"></span>  
                {/pc}  
                  
                  
                <!-- 第7-14篇文章 -->  
                {php $i=0;}  
                {pc:content action="lists"  catid="$catid"  limitt="7,7" order="id DESC"}  
                <ul class="erji_center_content">  
                    {loop $data $r}  
                    <li><a href="{$r[url]}">{$r[title]}</a></li>  
                    {/loop}  
                </ul>  
                <span class="border-cx"></span>  
                {/pc}  
      
                  
                  
                  
                <!-- 第14-21篇文章 -->  
                {php $i=0;}  
                {pc:content action="lists"  catid="$catid"  limitt="14,7" order="id DESC"}  
                <ul class="erji_center_content">  
                    {loop $data $r}  
                    <li><a href="{$r[url]}">{$r[title]}</a></li>  
                    {/loop}  
                </ul>  
                <span class="border-cx"></span>  
                {/pc} 
    /**
         * 列表页标签:主要返回的是主表中数据与附表中数据
         * @param $data
         */
        public function lists($data) {
            $catid = intval($data['catid']);                                    //pc标签中catid属性
            
            
            //加上这行代码即可
            $data['limit'] = (isset($data['limitt'])&& (!empty($data['limitt'])))?$data['limitt']:$data['limit'];    
    
            
            
            //pc标签中limit属性,此行代码由weiyanhui添加
            if(!$this->set_modelid($catid)) return false;                        //会根据栏目id->对应的模型id->对应的模型表
            if(isset($data['where'])) {                                            //如果pc标签中设置了where属性,一般情况下不存在
                $sql = $data['where'];                                            
            } else {                                                            //如果pc标签中没有设置where属性 
                $thumb = intval($data['thumb']) ? " AND thumb != ''" : '';        //如果有thumb属性
                if($this->category[$catid]['child']) {                            //当前栏目下是否存在子栏目
                    $catids_str = $this->category[$catid]['arrchildid'];        //所有子栏目id,包括当前栏目自身id
                    $pos = strpos($catids_str,',')+1;                            
                    $catids_str = substr($catids_str, $pos);                    //所有子栏目id,不包括当前栏目自身id
                    $sql = "status=99 AND catid IN ($catids_str)".$thumb;        //拼接成一个sql语句
                } else {
                        $sql = "status=99 AND catid='$catid'".$thumb;                //如果当前栏目下不存在子栏目
                }
            }
            $order = $data['order'];                                            //pc标签中order属性
            //$sql作为一个条件出现,调用的是model.calss.php文件中的select方法,返回结果集数组,并按照键名'id'排序
            $return = $this->db->select($sql, '*', $data['limit'], $order, '', 'id');//从数据库中获取主表数据,使用的也是sql语句查询
            //注意:修改了$data['limit']为$data['limitt']了,修改于2012年09月21日 19:15
            //如果需要在前台显示类别名称,可添加如下代码
            
            $TYPES = getcache('type_content','commons');//获取类别缓存文件,此文件缓存了所有与类别信息相关的信息
            foreach ($return as $key=>$v) {                                        
                $return[$key][typename]=$TYPES[$v['typeid']][name];//给$return中的每篇文章追加一个类别字段
            }
            //echo "<pre>";
            //print_r($return);
            
            //调用副表的数据
            if (isset($data['moreinfo']) && intval($data['moreinfo']) == 1) {    //如果pc标签中设置了moreinfo属性:是否调用附表数据
                $ids = array();
                //$return为返回的主表数据
                foreach ($return as $v) {                                        //循环主表中的记录信息:$v-主表中的每条记录
                    if (isset($v['id']) && !empty($v['id'])) {
                        $ids[] = $v['id'];                                        //ids[]是主表中排序完成的文章id数组
                    } else {
                        continue;
                    }
                }
                if (!empty($ids)) {
                    $this->db->table_name = $this->db->table_name.'_data';        //副表名 
                    $ids = implode('\',\'', $ids);                                //以逗号拼接成一个字符串
                    $r = $this->db->select("`id` IN ('$ids')", '*', '', '', '', 'id');//查询与主表中数据有关的副表中的数据
                    if (!empty($r)) {
                        foreach ($r as $k=>$v) {                                //副表中的数据
                            //$return:返回的主表中的数据,主表中的id字段值与附表中的id字段值是对应的,也就是说一篇文章在主表中存储的id跟在附表中存储的id的值是相等的
                            if (isset($return[$k])) $return[$k] = array_merge($v, $return[$k]);//主表中数据与副表中数据合并 
                        }
                    }
                }
            }
            return $return;
        }
  • 相关阅读:
    前端面试1
    关于JavaScript学习,推荐博客及书籍
    GET 和 POST 两种方式来完成Http接口
    mvc Web api 如何在控制器中调用
    c#怎么获取当前页面的url
    MVC3缓存:使用页面缓存
    十大排序算法梳理
    浅谈设计模式——工厂模式
    Java 中的 反射机制
    浅谈设计模式——单例模式
  • 原文地址:https://www.cnblogs.com/nidakun/p/2735116.html
Copyright © 2011-2022 走看看