Taglib自定义万能标签扩展 DownLoad

举报
lxw1844912514 发表于 2022/03/27 23:42:29 2022/03/27
【摘要】 http://www.thinkphp.cn/extend/538.html 用ThinkPHP的标签做网站觉得不够快速,就自己写了一个扩展,感觉挺好的,分享出来,给有需要的TPER。 复制代码 <?php class TagLibEP extends TagLib{...

http://www.thinkphp.cn/extend/538.html

用ThinkPHP的标签做网站觉得不够快速,就自己写了一个扩展,感觉挺好的,分享出来,给有需要的TPER。

复制代码

     
  1. <?php
  2. class TagLibEP extends TagLib{
  3. protected $tags = array('select'=>array('attr'=>'table,where,order,limit,id,page,sql,field,key,mod,debug','level'=>3));
  4. public function _select($attr,$content){
  5. $tag = $this->parseXmlAttr($attr,'select');
  6. $table =!empty($tag['table'])?$tag['table']:'';
  7. $order =!empty($tag['order'])?$tag['order']:'';
  8. $limit =!empty($tag['limit'])?intval($tag['limit']):'';
  9. $id =!empty($tag['id'])?$tag['id']:'r';
  10. $where =!empty($tag['where'])?$tag['where']:' 1 ';
  11. $key =!empty($tag['key'])?$tag['key']:'i';
  12. $mod =!empty($tag['mod'])?$tag['mod']:'2';
  13. $page =!empty($tag['page'])?$tag['page']:false;
  14. $sql =!empty($tag['sql'])?$tag['sql']:'';
  15. $field =!empty($tag['field'])?$tag['field']:'';
  16. $debug =!empty($tag['debug'])?$tag['debug']:false;
  17. $this->comparison['noteq']= '<>';
  18. $this->comparison['sqleq']= '=';
  19. $where =$this->parseCondition($where);
  20. $sql =$this->parseCondition($sql);
  21. $parsestr.='<?php $m=M("'.$table.'");';
  22. if($sql){
  23. if($page){
  24. $limit=$limit?$limit:10;//如果有page,没有输入limit则默认为10
  25. $parsestr.='import("@.ORG.Page");';
  26. $parsestr.='$count=count($m->query("'.$sql.'"));';
  27. $parsestr.='$p = new Page ( $count, '.$limit.' );';
  28. $parsestr.='$sql.="'.$sql.'";';
  29. $parsestr.='$sql.=" limit ".$p->firstRow.",".$p->listRows."";';
  30. $parsestr.='$ret=$m->query($sql);';
  31. $parsestr.='$pages=$p->show();';
  32. //$parsestr.='dump($count);dump($sql);';
  33. }else{
  34. $sql.=$limit?(' limit '.$limit):'';
  35. $parsestr.='$ret=$m->query("'.$sql.'");';
  36. }
  37. }else{
  38. if($page){
  39. $limit=$limit?$limit:10;//如果有page,没有输入limit则默认为10
  40. $parsestr.='import("@.ORG.Page");';
  41. $parsestr.='$count=$m->where("'.$where.'")->count();';
  42. $parsestr.='$p = new Page ( $count, '.$limit.' );';
  43. $parsestr.='$ret=$m->field("'.$field.'")->where("'.$where.'")->limit($p->firstRow.",".$p->listRows)->order("'.$order.'")->select();';
  44. $parsestr.='$pages=$p->show();';
  45. }else{
  46. $parsestr.='$ret=$m->field("'.$field.'")->where("'.$where.'")->order("'.$order.'")->limit("'.$limit.'")->select();';
  47. }
  48. }
  49. if($debug!=false){
  50. $parsestr.='dump($ret);dump($m->getLastSql());';
  51. }
  52. $parsestr.= 'if ($ret): $'.$key.'=0;';
  53. $parsestr.= 'foreach($ret as $key=>$'.$id.'):';
  54. $parsestr.= '++$'.$key.';$mod = ($'.$key.' % '.$mod.' );?>';
  55. $parsestr.= $this->tpl->parse($content);
  56. $parsestr.= '<?php endforeach;endif;?>';
  57. return $parsestr;
  58. }
  59. }
  60. ?>

 

DEMO:
文件放在ThinkPHP\Extend\Driver\TagLib\下,然后在config.php文件中引入,'TAGLIB_PRE_LOAD' => 'EP',
table:表名,where查询条件,order排序,id结果变量,page分页开启,field字段,key循环变量,mod取模,debug是否调试

  1. <EP:select sql="select * from table order by id desc" limit="10" page="1"></EP:select>
  2. <EP:select table="article" limit="10"></EP:select>
复制代码

无论是频道页面还是列表页面都可以实现分页了。

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

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/100028105

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。