<?php if(!defined('DEDEINC')) exit('Request Error!');
/**
* 视图类
*
* @version $Id: arc.partview.class.php 1 14:17 2010年7月7日Z tianya $
* @package DedeCMS.Libraries
* @copyright Copyright (c) 2007 - 2010, DesDev, Inc.
* @license http://help.dedecms.com/usersguide/license.html
* @link http://www.dedecms.com
*/
require_once(DEDEINC.'/channelunit.class.php');
require_once(DEDEINC.'/typelink.class.php');
require_once(DEDEINC.'/ftp.class.php');
/**
* 视图类
*
* @package PartView
* @subpackage DedeCMS.Libraries
* @link http://www.dedecms.com
*/
class PartView
{
var $dsql;
var $dtp;
var $TypeID;
var $Fields;
var $TypeLink;
var $pvCopy;
var $refObj;
var $ftp;
var $remoteDir;
/**
* php5构造函数
*
* @access public
* @param int $typeid 栏目ID
* @param int $needtypelink 是否需要栏目连接
* @return void
*/
function __construct($typeid=0,$needtypelink=TRUE)
{
global $_sys_globals,$ftp;
$this->TypeID = $typeid;
$this->dsql = $GLOBALS['dsql'];
$this->dtp = new DedeTagParse();
$this->dtp->SetNameSpace("dede","{","}");
$this->dtp->SetRefObj($this);
$this->ftp = &$ftp;
$this->remoteDir = '';
if($needtypelink)
{
$this->TypeLink = new TypeLink($typeid);
if(is_array($this->TypeLink->TypeInfos))
{
foreach($this->TypeLink->TypeInfos as $k=>$v)
{
if(preg_match("/[^0-9]/", $k))
{
$this->Fields[$k] = $v;
}
}
}
$_sys_globals['curfile'] = 'partview';
$_sys_globals['typename'] = $this->Fields['typename'];
//设置环境变量
SetSysEnv($this->TypeID,$this->Fields['typename'],0,'','partview');
}
SetSysEnv($this->TypeID,'',0,'','partview');
$this->Fields['typeid'] = $this->TypeID;
//设置一些全局参数的值
foreach($GLOBALS['PubFields'] as $k=>$v)
{
$this->Fields[$k] = $v;
}
}
//php4构造函数
function PartView($typeid=0,$needtypelink=TRUE)
{
$this->__construct($typeid,$needtypelink);
}
/**
* 重新指定引入的对象
*
* @access private
* @param object $refObj 引用对象
* @return void
*/
function SetRefObj(&$refObj)
{
$this->dtp->SetRefObj($refObj);
if(isset($refObj->TypeID))
{
$this->__construct($refObj->TypeID);
}
}
/**
* 指定typelink对象给当前类实例
*
* @access public
* @param string $typelink 栏目链接
* @return string
*/
function SetTypeLink(&$typelink)
{
$this->TypeLink = $typelink;
if(is_array($this->TypeLink->TypeInfos))
{
foreach($this->TypeLink->TypeInfos as $k=>$v)
{
if(preg_match("/[^0-9]/", $k))
{
$this->Fields[$k] = $v;
}
}
}
}
/**
* 设置要解析的模板
*
* @access public
* @param string $temp 模板
* @param string $stype 设置类型
* @return string
*/
function SetTemplet($temp,$stype="file")
{
if($stype=="string")
{
$this->dtp->LoadSource($temp);
}
else
{
$this->dtp->LoadTemplet($temp);
}
if($this->TypeID > 0)
{
$this->Fields['position'] = $this->TypeLink->GetPositionLink(TRUE);
$this->Fields['title'] = $this->TypeLink->GetPositionLink(false);
}
$this->ParseTemplet();
}
/**
* 显示内容
*
* @access public
* @return void
*/
function Display()
{
$this->dtp->Display();
}
/**
* 获取内容
*
* @access public
* @return string
*/
function GetResult()
{
return $this->dtp->GetResult();
}
/**
* 保存结果为文件
*
* @access public
* @param string $filename 文件名
* @param string $isremote 是否远程
* @return string
*/
function SaveToHtml($filename,$isremote=0)
{
global $cfg_remote_site;
//如果启用远程发布则需要进行判断
if($cfg_remote_site=='Y' && $isremote == 1)
{
//分析远程文件路径
$remotefile = str_replace(DEDEROOT, '', $filename);
$localfile = '..'.$remotefile;
//创建远程文件夹
$remotedir = preg_replace('/[^\/]*\.js/', '', $remotefile);
$this->ftp->rmkdir($remotedir);
$this->ftp->upload($localfile, $remotefile, 'ascii');
}
$this->dtp->SaveTo($filename);
}
/**
* 解析模板里的标签
*
* @access private
* @return void
*/
function ParseTemplet()
{
$GLOBALS['envs']['typeid'] = $this->TypeID;
if($this->TypeID>0)
{
$GLOBALS['envs']['topid'] = GetTopid($this->TypeID);
}
else
{
$GLOBALS['envs']['topid'] = 0;
}
if(isset($this->TypeLink->TypeInfos['reid']))
{
$GLOBALS['envs']['reid'] = $this->TypeLink->TypeInfos['reid'];
}
if(isset($this->TypeLink->TypeInfos['channeltype']))
{
$GLOBALS['envs']['channelid'] = $this->TypeLink->TypeInfos['channeltype'];
}
MakeOneTag($this->dtp,$this); //这个函数放在 channelunit.func.php 文件中
}
/**
* 获得限定模型或栏目的一个指定文档列表
* 这个标记由于使用了缓存,并且处理数据是支持分表模式的,因此速度更快,但不能进行整站的数据调用
* @param string $templets
* @param int $typeid
* @param int $row
* @param int $col
* @param int $titlelen
* @param int $infolen
* @param int $imgwidth
* @param int $imgheight
* @param string $listtype
* @param string $orderby
* @param string $keyword
* @param string $innertext
* @param int $tablewidth
* @param int $arcid
* @param string $idlist
* @param int $channelid
* @param string $limit
* @param int $att
* @param string $order
* @param int $subday
* @param int $autopartid
* @param int $ismember
* @param string $maintable
* @param object $ctag
* @return array
*/
function GetArcList($templets='',$typeid=0,$row=10,$col=1,$titlelen=30,$infolen=160,
$imgwidth=120,$imgheight=90,$listtype="all",$orderby="default",$keyword="",$innertext="",
$tablewidth="100",$arcid=0,$idlist="",$channelid=0,$limit="",$att=0,$order='desc',$subday=0,
$autopartid=-1,$ismember=0,$maintable='',$ctag='')
{
if(empty($autopartid))
{
$autopartid = -1;
}
if(empty($typeid))
{
$typeid=$this->TypeID;
}
if($autopartid!=-1)
{
$typeid = $this->GetAutoChannelID($autopartid,$typeid);
if($typeid==0)
{
return "";
}
}
if(!isset($GLOBALS['__SpGetArcList']))
{
require_once(dirname(__FILE__)."/inc/inc_fun_SpGetArcList.php");
}
return SpGetArcList($this->dsql,$templets,$typeid,$row,$col,$titlelen,$infolen,$imgwidth,$imgheight,
$listtype,$orderby,$keyword,$innertext,$tablewidth,$arcid,$idlist,$channelid,$limit,$att,
$order,$subday,$ismember,$maintable,$ctag);
}
//关闭所占用的资源
function Close()
{
}
}//End Class