<?php
/**
* 易优CMS
* ============================================================================
* 版权所有 2016-2028 海南赞赞网络科技有限公司,并保留所有权利。
* 网站地址: http://www.eyoucms.com
* ----------------------------------------------------------------------------
* 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
* ============================================================================
* Author: 小虎哥 <1105415366@qq.com>
* Date: 2018-4-3
*/
namespace think\template\taglib;
use think\template\TagLib;
/**
* eyou标签库解析类
* @category Think
* @package Think
* @subpackage Driver.Taglib
* @author 小虎哥 <1105415366@qq.com>
*/
class Eyou extends Taglib
{
// 标签定义
protected $tags = [
// 标签定义: attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次
'php' => ['attr' => ''],
'channel' => ['attr' => 'typeid,reid,type,row,currentstyle,id,name,key,empty,mod,titlelen,offset,limit'],
'channelartlist' => ['attr' => 'typeid,type,row,id,key,empty,titlelen,mod'],
'arclist' => ['attr' => 'channelid,typeid,notypeid,row,offset,titlelen,limit,orderby,orderWay,noflag,flag,infolen,empty,mod,name,id,key,addfields,tagid,pagesize'],
'arcpagelist'=> ['attr' => 'tagid,pagesize,id,tips,loading'],
'list' => ['attr' => 'channelid,typeid,notypeid,pagesize,titlelen,orderby,orderWay,noflag,flag,infolen,empty,mod,id,key,addfields'],
'pagelist' => ['attr' => 'listitem,listsize', 'close' => 0],
'position' => ['attr' => 'symbol,style', 'close' => 0],
'type' => ['attr' => 'typeid,type,empty,dirname,id,addfields,addtable'],
'arcview' => ['attr' => 'aid,empty,id,addfields'],
'arcclick' => ['attr' => '', 'close' => 0],
'load' => ['attr' => 'file,href,type,value,basepath', 'close' => 0, 'alias' => ['import,css,js', 'type']],
'guestbookform'=> ['attr' => 'typeid,type,empty,id,mod,key'],
'assign' => ['attr' => 'name,value', 'close' => 0],
'empty' => ['attr' => 'name'],
'notempty' => ['attr' => 'name'],
'foreach' => ['attr' => 'name,id,item,key,offset,length,mod', 'expression' => true],
'volist' => ['attr' => 'name,id,offset,length,key,mod,limit,row', 'alias' => 'iterate'],
'if' => ['attr' => 'condition', 'expression' => true],
'elseif' => ['attr' => 'condition', 'close' => 0, 'expression' => true],
'else' => ['attr' => '', 'close' => 0],
'switch' => ['attr' => 'name', 'expression' => true],
'case' => ['attr' => 'value,break', 'expression' => true],
'default' => ['attr' => '', 'close' => 0],
'compare' => ['attr' => 'name,value,type', 'alias' => ['eq,equal,notequal,neq,gt,lt,egt,elt,heq,nheq', 'type']],
'ad' => ['attr' => 'aid,id', 'close'=>1],
'adv' => ['attr' => 'pid,row,order,where,id,empty,key,mod,currentstyle', 'close'=>1],
'global' => ['attr' => 'name', 'close' => 0],
'static' => ['attr' => 'file,lang,href,code', 'close' => 0],
'prenext' => ['attr' => 'get,titlelen,id,empty'],
'field' => ['attr' => 'name,addfields,aid', 'close' => 0],
'searchurl' => ['attr' => '', 'close' => 0],
'searchform' => ['attr' => 'channel,typeid,notypeid,flag,noflag,type,empty,id,mod,key', 'close'=>1],
'tag' => ['attr' => 'aid,name,row,id,key,mod,typeid,getall,sort,empty,style'],
'flink' => ['attr' => 'type,row,id,key,mod,titlelen,empty,limit'],
'language' => ['attr' => 'type,row,id,key,mod,titlelen,empty,limit,currentstyle'],
'lang' => ['attr' => 'name,const', 'close' => 0],
'ui' => ['attr' => 'open', 'close' => 0],
'uitext' => ['attr' => 'e-id,e-page,id'],
'uihtml' => ['attr' => 'e-id,e-page,id'],
'uiupload' => ['attr' => 'e-id,e-page,id'],
'uitype' => ['attr' => 'e-id,e-page,id,typeid'],
'uiarclist' => ['attr' => 'e-id,e-page,id,typeid'],
'uichannel' => ['attr' => 'e-id,e-page,id,typeid'],
// 'sql' => ['attr' => 'sql,key,id,mod,cachetime,empty', 'close'=>1, 'level'=>3], // eyou sql 万能标签
'weapp' => ['attr' => 'type', 'close' => 0], // 网站应用插件
'range' => ['attr' => 'name,value,type', 'alias' => ['in,notin,between,notbetween', 'type']],
'present' => ['attr' => 'name'],
'notpresent' => ['attr' => 'name'],
'defined' => ['attr' => 'name'],
'notdefined' => ['attr' => 'name'],
'define' => ['attr' => 'name,value', 'close' => 0],
'for' => ['attr' => 'start,end,name,comparison,step'],
'url' => ['attr' => 'link,vars,suffix,domain', 'close' => 0, 'expression' => true],
'function' => ['attr' => 'name,vars,use,call'],
'diyfield' => ['attr' => 'name,id,key,mod,type,empty,limit'],
'attribute' => ['attr' => 'aid,type,empty,id,mod,key'],
'attr' => ['attr' => 'aid,name', 'close' => 0],
'user' => ['attr' => 'type,id,key,mod,empty,currentstyle,img,txt,txtid'],
'weapplist' => ['attr' => 'type,id,key,mod,empty,currentstyle'], // 网站应用插件列表
'usermenu' => ['attr' => 'row,id,empty,key,mod,currentstyle,limit'],
// 购物行为标签
'sppurchase' => ['attr' => 'row,id,key,mod,empty'],
// 购物车大标签
'spcart' => ['attr' => 'row,id,key,mod,empty,limit'],
// 订单明细大标签
'sporder' => ['attr' => 'row,id,key,mod,empty,limit'],
// 订单提交大标签
'spsubmitorder'=> ['attr' => 'row,id,key,mod,empty,limit'],
// 订单管理页大标签
'sporderlist'=> ['attr' => 'row,id,key,mod,empty,limit,pagesize'],
// 地址标签
'spaddress' => ['attr' => 'type,row,id,key,mod,empty,limit'],
// 订单产品标签
'spordergoods'=> ['attr' => 'row,id,key,mod,empty,limit,name,titlelen'],
// 订单状态标签
'spstatus' => ['attr' => 'row,id,key,mod,empty,limit'],
// 订单管理页,分页标签
'sppageorder' => ['attr' => 'listitem,listsize', 'close' => 0],
// 订单管理页搜索标签
'spsearch' => ['attr' => 'empty,id,mod,key'],
];
/**
* 自动识别构建变量,传值可以使变量也可以是值
* @access private
* @param string $value 值或变量
* @return string
*/
private function varOrvalue($value)
{
$flag = substr($value, 0, 1);
if ('$' == $flag || ':' == $flag) {
$value = $this->autoBuildVar($value);
} else {
$value = str_replace('"', '\"', $value);
$value = '"' . $value . '"';
}
return $value;
}
/**
* 万能的SQL标签
*/
public function tagSql($tag, $content)
{
$sql = $tag['sql']; // sql 语句
$sql = $this->varOrvalue($sql);
$key = !empty($tag['key']) ? $tag['key'] : 'i';
$mod = isset($tag['mod']) ? $tag['mod'] : '2';
$id = !empty($tag['id']) ? $tag['id'] : 'field';// 返回的变量
$cachetime = !empty($tag['cachetime']) ? $tag['cachetime'] : '';// 缓存时间
$empty = isset($tag['empty']) ? $tag['empty'] : '';
$empty = htmlspecialchars($empty);
$parseStr = '<?php ';
$parseStr .= ' $tagSql = new \think\template\taglib\eyou\TagSql;';
$parseStr .= ' $_result = $tagSql->getS