<?php
namespace imcat;
/*
*/
// 标签解析 基类
class tagBase{
public $modid = '';
public $paras = array();
public $mcfg = array();
public $sqlArr = array();
public $sqlAll = '';
public $whrArr = array();
public $whrStr = '';
public $jonArr = array();
public $re = array();
public $exFld1 = array('aip','eip','atime','etime','show',);
public $exFld2 = array(); //did,cid,uid,aid,kid ...
public $fpk = 'kid'; //
public $db = NULL;
function __construct($paras=array()) {
$this->paras = $paras;
$this->db = glbDBObj::dbObj();
$this->setModid();
$this->setFrom();
$this->pJoin();
$this->mcfg = glbConfig::read($this->modid);
}
// 所有公用: [idfix,top] -=> array('idfix','top')
function p1Cfg($key='modid'){
foreach($this->paras as $k=>$p1){
if($p1[0]==$key){
return $p1;
}
}
return array();
}
// 所有公用:
function setModid(){
$para = $this->p1Cfg('modid');
$this->modid = empty($para[1]) ? $this->mod : $para[1];
}
// List, Page, One:
function setFrom(){
$_groups = glbConfig::read('groups');
$mod = $this->modid;
if(empty($_groups[$mod])){
glbError::show("{$mod} NOT Found!",0);
}
if($_groups[$mod]['pid']=='docs'){
$tabid = 'docs_'.$mod;
$ordef = $fpk = 'did';
$exFld2[] = 'did';
}elseif($_groups[$mod]['pid']=='users'){
$tabid = 'users_'.$mod;
$ordef = 'atime';
$exFld2[] = $fpk = 'uid';
}elseif($_groups[$mod]['pid']=='advs'){
$tabid = 'advs_'.$mod;
$ordef = 'atime';
$exFld2[] = $fpk = 'aid';
}elseif($_groups[$mod]['pid']=='coms'){
$tabid = 'coms_'.$mod;
$ordef = $fpk = 'cid';
$exFld2[] = 'cid';
}elseif($_groups[$mod]['pid']=='types'){
$tabid = empty($_groups[$mod]['etab']) ? 'types_common' : 'types_'.$mod;
$ordef = $fpk = 'kid'; //不使用
$exFld2[] = 'kid';
}
$this->sqlArr['tabid'] = $tabid;
$this->sqlArr['prefix'] = $this->db->pre;
$this->sqlArr['suffix'] = $this->db->ext;
$this->sqlArr['ordef'] = $ordef;
$this->fpk = $fpk;
$this->exFld2 = $exFld2;
}
// Join (目前仅支持一个join)
// [join,detail] -=> INNER JOIN dext_news d ON d.did=m.did
function pJoin(){
$cfg = $this->p1Cfg('join');
$this->jonArr = $cfg;
}
// [order,0,kid1+f02+f03,1]
// order, odesc
function pOrder(){
$cfg = $this->p1Cfg('order');
if(empty($cfg)){
$order = '';
}elseif(!empty($cfg[1])){
$order = $cfg[1]; //认证?
}elseif(empty($cfg[1]) && !empty($cfg[2])){
$order = basReq::val('order','','Key',24);
$a = explode('+',$cfg[2]);
if($order && !in_array($order,$a)){ //认证?
$order = '';
}
}else{
$order = '';
}
$order || $order = $this->sqlArr['ordef'];
$odesc = isset($cfg[3]) ? $cfg[3] : basReq::val('odesc','1','N');
$this->sqlArr['order'] = $order;
if(strpos($order,',') || strpos($order,' ')){ // 复合排序
$this->sqlArr['odesc'] = 0;
$this->sqlArr['ofull'] = $order;
}else{
$this->sqlArr['odesc'] = $odesc;
$this->sqlArr['ofull'] = 'm.'.$order.($odesc ? ' DESC' : '');
}
}
//
function pStype(){
global $_cbase;
$cfg = $this->p1Cfg('stype');
if(empty($cfg)) return;
//优先取标签属性,再取url的stype
if(!empty($cfg[1])){
$stype = $cfg[1];
}else{
$stype = basReq::val('stype');
if(empty($stype) && !empty($_cbase['mkv']['key'])){
$stype = $_cbase['mkv']['key'];
}
}
if(empty($stype)) return;
$_groups = glbConfig::read('groups');
$pid = $_groups[$this->modid]['pid'];
if($stype && in_array($pid,array('docs','advs'))){
$sql = basSql::whrTree($this->mcfg['i'],'m.catid',$stype);
$this->whrArr[] = $sql ? substr($sql,5) : '';
}elseif($stype && in_array($pid,array('users'))){
$this->whrArr[] = "m.grade='$stype'";
}else{ //交互等,无stype
}
}
// `-=>', [where,did=`2004-33-2ycx`]
function pWhere(){
global $_cbase;
$whr = '';
foreach($this->whrArr as $w){
$whr .= ' AND '.$w;
}
$cfg = $this->p1Cfg('where');
if(!empty($cfg[1])){
$whr .= (substr($cfg[1],0,5)!=' AND ' ? ' AND ':'').$cfg[1];
}
// 处理:默认`show=1`及`show=all`条件
$_groups = glbConfig::read('groups');
$pid = $_groups[$this->modid]['pid'];
if(in_array($pid,array('docs','users','coms','advs'))){
if(strpos($whr,"(m.show='all')")){
$whr = str_replace([" AND (m.show='all')","(m.show='all')"],'',$whr);
}elseif(strstr($whr,'m.show IN(')){
//
}elseif(!strpos($whr,'(m.show=')){
$whr .= " AND (m.show='1')";
} //echo "($whr)<br>\n";
}
// [语言/城市]资料 --- `part`条件
if(in_array($this->modid,$_cbase['part']['mods'])){
$bd = isset($_cbase['tpl']['bdpart']) ? $_cbase['tpl']['bdpart'] : '';
$cfg=$this->p1Cfg('part'); $p=basReq::val('part'); $val='';
if($bd) { $val = $bd; } // 绑定条件
elseif(!empty($cfg[1])) { if($cfg[1]!=='(all)') $val = $cfg[1]; } // 标签条件
elseif(!empty($cfg[0]) && $p){ $val = $p; } // Url条件
$val && $whr .= " AND (m.part='$val')";
}
if(substr($whr,0,5)==' AND ') $whr = substr($whr,5);
$this->whrStr = $whr;
}
function getJoin($re){
if(empty($re)) return $re;
$minfo = glbConfig::read($this->modid);
if(!empty($this->jonArr[1]) && $this->jonArr[1]=='detail'){
if(in_array($minfo['pid'],array('docs','types'))){
dopFunc::joinDext($re,$this->modid, $minfo['pid']=='docs'?'did':'kid');
}
}
return $re;
}
function getData(){
$type = $this->modid;
$re[0] = array('kid'=>'docs','did'=>'yyyy-12-7890','title'=>'4-title'.$type);
$re[1] = array('kid'=>'advs','aid'=>'yyyy-34-1234','title'=>'5-title'.$type);
$re[2] = array('kid'=>'coms','cid'=>'yyyy-56-5678','title'=>'6-title'.$type);
return $re;
}
function debug($key=''){
if($key){
echo "<pre>debug\n";
print_r($this->$key);
echo "</pre>";
}else{
print_r($this->sqlArr);
print_r($this->sqlAll);
print_r($this->whrArr);
print_r($this->whrStr);
if(isset($this->pgbar)) print_r($this->pgbar);
}
}
}