blogCMS标签库源码例子

 代码如下 复制代码

<?php
import('TagLib');
class TagLibBlog extends TagLib {
  
   protected $tags=array(
       'blog_cate'=>array('attr'=>'typeid,reid,model,menu,order,limit,name','close'=>0),
       'blog_blog'=>array('attr'=>'id,typeid,order,limit,name','close'=>0),
       'blog_link'=>array('attr'=>'kind,order,limit,name','close'=>0),
       'blog_sql'=>array('attr'=>'sql,name','close'=>0),
       'blog_comment'=>array('attr'=>'aid,reid,order,limit,name','close'=>0),
       'blog_tag'=>array('attr'=>'order,limit,name','close'=>0),
       'blog_group'=>array('attr'=>'order,limit,name','close'=>0),
   );
  
   //获取栏目信息
   public function _blog_cate($attr){
       $attr=$this->parseXmlAttr($attr);
       extract($attr);
       $sql='where 1';
       if(isset($typeid)){
           $sql.=" and id=$typeid";
       }
       if(isset($reid)){
           $sql.=" and reid=$reid";
       }
       if(isset($model)){
           $sql.=" and model=$model";
       }
       if(isset($menu)){
           $sql.=" and menu=$menu";
       }
       if(isset($order)){
           $sql.=" order by $order";
       }
       if(isset($limit)){
           $sql.=" limit $limit";
       }
       if(empty($name)){
           $name='list';
       }
       $str=<<<str
       <?php
       ${$name}=M()->query("select id,name,reid from blog_category {$sql}");
       import('@.Class.Tool');
       ${$name}=Tool::formatMultiArray(${$name});
       ?>
str;
       return $str;
   }
  
   //获取博文列表
   public function _blog_blog($attr){
       $attr=$this->parseXmlAttr($attr);
       extract($attr);
       $sql='where 1';
       if(isset($id)){
           $sql.=" and a.id in ($id)";
       }
       if(isset($typeid)){
           import('@.Class.Tool');
           $categories=M('category')->select();
           $arr=Tool::getChildsId($categories,$typeid);
           $arrStr=implode(",",$arrStr);
           $sql.=" and a.reid in ($typeid)";
       }
       if(isset($order)){
           $sql.=" order by a.$order";
       }
       if(isset($limit)){
           $sql.=" limit $limit";
       }
       if(empty($name)){
           $name='list';
       }
       $str=<<<str
       <?php
       ${$name}=M()->query("select a.*,c.name as cname from blog_article as a left join blog_category as c on a.reid=c.id {$sql}");
       foreach(${$name} as $key=>$value){
           if($value['keywords']){
               ${$name}[$key]['tag']=explode(',',$value['keywords']);
           }
       }
       ?>
str;
       return $str;   
   }

   //友链调用标签
   public function _blog_link($attr){
       $attr=$this->parseXmlAttr($attr);
       extract($attr);
       $sql='where 1 and state=1';
       if(isset($kind)){
           $sql.=" and kind=$kind";
       }
       if(isset($order)){
           $sql.=" order by $order";
       }
       if(isset($limit)){
           $sql.=" limit $limit";
       }
       if(empty($name)){
           $name='list';
       }
       $str=<<<str
       <?php
       ${$name}=M()->query("select name,url,imgurl from blog_link {$sql}");
       ?>
str;
       return $str;
   }
  
   //万能sql调用标签
   public function _blog_sql($attr){
       $attr=$this->parseXmlAttr($attr);
       extract($attr);
       if(empty($name)){
           $name='list';
       }
       if(empty($sql)){
           echo '模板标签有误';
           exit;
       }
       if(preg_match('/update|insert|delete/',$sql)){
           echo 'sql语句包含危险操作';
           exit;
       }
       $str=<<<str
       <?php
       ${$name}=M()->query("{$sql}");
       p(${$name});
       exit;
       ?>
str;
       return $str;
   }
  
   //评论列表标签
   public function _blog_comment($attr){
       $attr=$this->parseXmlAttr($attr);
       extract($attr);
       $sql='where 1 and islock=0';
       if(isset($aid)){
           $sql.=" and aid=$aid";
       }
       if(isset($reid)){
           $sql.=" and reid=$reid";
       }
       if(isset($order)){
           $sql.=" order by $order";
       }
       if(isset($limit)){
           $sql.=" limit $limit";
       }
       if(empty($name)){
           $name='list';
       }
       $str=<<<str
       <?php
       ${$name}=M()->query("select * from blog_comment $sql");
       import('@.Class.Tool');
       ${$name}=Tool::formatOneArray(${$name});
       ?>
str;
       return $str;
   }
  
   //Tag列表标签
   public function _blog_tag($attr){
       $attr=$this->parseXmlAttr($attr);
       extract($attr);
       $sql='where 1';
       if(isset($order)){
           $sql.=" order by $order";
       }
       if(isset($limit)){
           $sql.=" limit $limit";
       }
       if(empty($name)){
           $name='list';
       }
       $str=<<<str
       <?php
       ${$name}=M()->query("select tagname,counts from blog_tag $sql");
       foreach(${$name} as $key=>$value){
           $num=floor(($value['counts']+1200)/100);
           $num=$num>30? 30:$num;
           ${$name}[$key]['size']=$num;
       }
       shuffle(${$name});
       ?>
str;
       return $str;       
   }
  
   //文档归档标签
   public function _blog_group($attr){
       $attr=$this->parseXmlAttr($attr);
       extract($attr);
       $sql='where 1';
       if(empty($name)){
           $name='list';
       }
       $str=<<<str
       <?php
       ${$name}=M()->query("select count(*) as num,from_unixtime(pubdate,'%Y-%m') as pdate from blog_article group by pdate order by pdate desc");
       ?>
str;
       return $str;       
   }
}

?>

时间: 2024-09-23 03:08:27

blogCMS标签库源码例子的相关文章

本人自用的global.js库源码分享

 这篇文章主要介绍了本人自用的global.js库源码分享,源码中包含常用WEB操作,如命名空间.DOM操作.数据判断.Cookie操作等功能,需要的朋友可以参考下     ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Redrain个人维护并使用的DuiLib和UiLib库源码下载地址

转载请说明原出处:http://blog.csdn.net/zhuhongshu/article/details/40740353,谢谢~~     首先说明一下Duilib和Uilib的区别:UiLIb是DuiLib是升级扩展版,UiLib增加了一些控件,比如渐变的FadeButton,并且增强了不少控件的功能和属性,比如托盘功能,同时也支持一些动画动能,和一些新模块.DuiLib和UiLib当前都处于无人维护的状态.所以我单独做了自己维护的版本.我把我修复的bug.对库的改进和增强.都同步对

sigslot库源码分析

最近一直在忙毕设的事情,博客都快被遗忘了.最近正好在研究sigslot库,索性晚上写点源码分析的水文充充数. 言归正传,sigslot是一个用标准C++语法实现的信号与槽机制的函数库,类型和线程安全.提到信号与槽机制,恐怕最容易想到的就是大名鼎鼎的Qt所支持的对象之间通信的模式吧.不过这里的信号与槽虽然在概念上等价与Qt所实现的信号与槽,但是采用的仅仅是标准C++语法,不像Qt采用了扩展C++语言的方式(Qt需要使用moc工具对代码预处理之后,才能由标准的C++编译器进行编译). 众所周知,C+

cJSON库源码分析

cJSON是一个超轻巧,携带方便,单文件,简单的可以作为ANSI-C标准的Json格式解析库. 那什么是Json格式?这里照搬度娘百科的说法: Json(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition – December 1999)的一个子集.JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScri

一个golang并行库源码解析

场景 有这样一种场景:四个任务A.B.C, D,其中任务B和C需要并发执行,得到结果1, 任务A执行得到结果2, 结果1和2作为任务D的参数传入,然后执行任务D得到最终结果.我们可以将任务执行顺序用如下图标识: jobA jobB jobC \ \ / \ \ / \ middle \ / \ / jobD 这是一个典型的多任务并发场景,实际上随着任务数量的增多,任务逻辑会更加复杂,如何编写可维护健壮的逻辑代码变得十分重要,虽然golang提供了同步机制,但是需要写很多重复无用的Add/Wait

本人自用的global.js库源码分享_javascript技巧

var GLOBAL = {}; GLOBAL.namespace = function(str) { var arr = str.split("."), o = GLOBAL,i; for (i = (arr[0] = "GLOBAL") ? 1 : 0; i < arr.length; i++) { o[arr[i]] = o[arr[i]] || {}; o = o[arr[i]]; } }; //Dom相关 GLOBAL.namespace("

muduo库源码剖析(一) reactor模式

一. Reactor模式简介 Reactor释义"反应堆",是一种事件驱动机制.和普通函数调用的不同之处在于:应用程序不是主动的调用某个API完成处理,而是恰恰相反,Reactor逆置了事件处理流程,应用程序需要提供相应的接口并注册到Reactor上,如果相应的时间发生,Reactor将主动调用应用程序注册的接口,这些接口又称为"回调函数". 二. moduo库Reactor模式的实现 muduo主要通过3个类来实现Reactor模式:EventLoop,Chann

muduo库源码剖析(二) 服务端

一. TcpServer类: 管理所有的TCP客户连接,TcpServer供用户直接使用,生命期由用户直接控制.用户只需设置好相应的回调函数(如消息处理messageCallback)然后TcpServer::start()即可. 主要数据成员: boost::scoped_ptr<Accepter> acceptor_; 用来接受连接 std::map<string,TcpConnectionPtr> connections_; 用来存储所有连接 connectonCallbac

ASP实用函数库源码(一)

下面的代码是我最近正在整理的常用代码的一部分,陆续我将放出更多的实用代码,请大家把自己的代码回复,一边我整理,谢谢!QQ:393356<%'判断文件名是否合法Function isFilename(aFilename) Dim sErrorStr,iNameLength,i isFilename=TRUE sErrorStr=Array("/","",":","*","?",""&