<?php
namespace imcat;
(!
defined('RUN_INIT')) && die('No Init');

/*

*/
// 标签解析 (数据列表)类
class tagList extends tagBase{
    
    
//public $whrArr = array();
    
    
function __construct($paras=array()) {
        
parent::__construct($paras); 
        
$this->pOrder();
        
$this->pLimit();
        
$this->pOffset();
        
$this->pStype();
        
$this->pKeywd();
        
$this->pField();
        
$this->pPid();
        
$this->inIds();
        
$this->pWhere();
    }
    
    function 
pPid(){ 
        
$cfg $this->p1Cfg('pid'); 
        if(empty(
$cfg[1])) return;
        
$_groups glbConfig::read('groups'); 
        
$pmod = @$_groups[$this->modid]['pmod'];
        if(!
$pmod) return;
        
$cfg[1] = basStr::filKey($cfg[1],'-.@');
        
$this->whrArr[] = "m.pid='{$cfg[1]}'";
    }
    function 
inIds(){ 
        
$cfg $this->p1Cfg('inids'); 
        if(empty(
$cfg[1])) return;
        
$a array_filter(explode(',',$cfg[1]));
        
$s implode("','",$a);
        if(
$s){
            
$this->whrArr[] = "m.{$this->fpk} IN('$s')";
        }
    }
    
    function 
pOffset(){
        
$cfg $this->p1Cfg('offset'); 
        
$offset = empty($cfg[1]) ? intval($cfg[1]);
        
$this->sqlArr['offset'] = $offset;
    }

    function 
pLimit(){
        global 
$_cbase
        
$cfg $this->p1Cfg('limit'); 
        
$limit = empty($cfg[1]) ? intval($cfg[1]);
        if(
$limit<1$limit intval($_cbase['show']['fpsize']);
        if(
$limit<1$limit 10;
        
$this->sqlArr['limit'] = $limit;
    }

    function 
pKeywd(){ 
        
$cfg $this->p1Cfg('keywd');
        
$sql ''
        if(!empty(
$cfg)){
            
$fix = empty($cfg[1]) ? basReq::val('keywd') : $cfg[1]; 
            
$fields = @$cfg[2];
            
$_groups glbConfig::read('groups'); 
            if(
$fix && $fields){
                
$flist $this->mcfg['f'];
                
$fa explode('+',$fields);
                
$sql '';
                foreach(
$fa as $f){ 
                    if(isset(
$flist[$f]) && empty($flist[$f]['etab'])){ 
                        
$sql .= " OR m.$f ".basSql::fmtKeyWD($fix)."";    
                    }
                }
                
$sql && $sql "(".substr($sql,4).")";
            }elseif(
$fix){
                
$pid $_groups[$this->modid]['pid'];    
                if(
in_array($pid,array('docs','advs'))){
                    
$def 'title';
                }elseif(
in_array($pid,array('users'))){
                    
$def 'mname';
                }else{ 
//交互等,无keywd
                    
$def '';
                }
                
$def && $sql "m.$def ".basSql::fmtKeyWD($fix)."";
            }
            
$sql && $this->whrArr[] = $sql;

        }
    }
    
    
//  //val=id1+id2+  -=>  IN ('libk', 'zyfon', 'daodao');
    
function pField(){ 
        
$flist $this->mcfg['f'];
        
$exFields array_merge($this->exFld1,$this->exFld2); 
        foreach(
$this->paras as $para){ 
            
$sql '';
            if(isset(
$flist[$para[0]]) || in_array($para[0],$exFields)){
                
$f $para[0];
                
$v = isset($para[1]) ? $para[1] : basReq::val($f); 
                
$op = @$para[2]; 
                if(
strlen($v)>0){ // 0可以通过
                    
if(in_array($op,array('>','>=','<','<='))){ 
                        
$sql "(m.$f $op '$v')";
                    }elseif(
$op=='in'){
                        
$v str_replace("'","",$v);
                        
$v str_replace('+',"','","'$v'");
                        
$sql "m.$f IN($v)";    
                    
//}elseif($op=='fset'){ // fset FIND_IN_SET(goods_id, '{$ids}')"
                    
}elseif($op=='like'){
                        
$sql "m.$f ".basSql::fmtKeyWD($v)."";    
                    }else{
                        
$sql "(m.$f='$v')";    
                    }
                }
            }
            
$sql && $this->whrArr[] = $sql;
        }
    }
    
    function 
getData(){ 
        
$sfrom "m.* FROM ".glbDBObj::dbObj()->table($this->sqlArr['tabid'],2)." m ";
        
$where = empty($this->whrStr) ? '' "WHERE ".$this->whrStr;
        
$offset = empty($this->sqlArr['offset']) ? '' $this->sqlArr['offset'].','
        
$this->sqlAll "SELECT $sfrom $where ORDER BY ".$this->sqlArr['ofull']." LIMIT $offset".$this->sqlArr['limit']; 
        
$re $this->re $this->db->query($this->sqlAll); 
        return 
$this->getJoin($re);
            
    }

}