phpcms2007标签模板技术分析--大伙一块讨论啊
时间:2008-07-22
来源:互联网
根目录/include/global.func.php里的三个与tag标签有关的函数
另外: eval($tags[$name].';'); 这句啥意思大虾给点一下
PHPCMS_ROOT.'/templates/'.$CONFIG['defaulttemplate'].'/tags.php'; 这个文件里定义了$tags数组中文标签名对应的函数,比如
module是article就引入根目录/module/article/include/tat.func.php,里面有专门处理以article_开头的标签函数;
难点就在tag.func.php里的函数上,以及怎么新建标签和修改标签,听说新建标签是选择相应的标签模板,不知道啥意思,
大虾们跟帖啊...
老逆你就歇着吧,雷声大,雨点小
[ 本帖最后由 fan12 于 2008-7-21 18:40 编辑 ]
复制内容到剪贴板
{
global $mod,$channelid;
ob_start();
tag_data($keyid, $name);
$data = ob_get_contents();
ob_clean();
$dir = PHPCMS_ROOT.'/data/tagscache/'.$keyid.'/';
$file = $dir.$mod.'_'.$channelid.'_'.urlencode($name).'.html';
dir_create($dir);
file_put_contents($file, $data);
@chmod($file, 0777);
return $data;
}
function tag_read($keyid, $name)
{
global $CONFIG,$PHP_TIME;
if(!isset($keyid) || !$keyid) return '<span style="color:red">$keyid undefined</span>';
if(defined('CREATEHTML') || $CONFIG['phpcache'] != '1') return tag_data($keyid, $name);
$file = PHPCMS_ROOT.'/data/tagscache/'.$keyid.'/'.urlencode($name).'.html';
if(!file_exists($file) || (filemtime($file) < $PHP_TIME - $CONFIG['phpcacheexpires'])) return tag_write($keyid, $name);
include $file;
}
function tag_data($keyid, $name)
{
global $tags,$mod,$MODULE,$CHANNEL,$CONFIG;
if(!$tags) require PHPCMS_ROOT.'/templates/'.$CONFIG['defaulttemplate'].'/tags.php';
if(is_numeric($keyid))
{
$channelid = intval($keyid);
$module = $CHANNEL[$channelid]['module'];
}
else
{
$channelid = $GLOBALS['channelid'];
$module = $keyid;
}
if(isset($MODULE[$module]))
{
require_once PHPCMS_ROOT.'/'.moduledir($module).'/include/tag.func.php';
eval($tags[$name].';');
}
}
意思大概都懂吧,tag_write和tag_read供调用,tag_data干实际的事儿,代码:
function tag_write($keyid, $name){
global $mod,$channelid;
ob_start();
tag_data($keyid, $name);
$data = ob_get_contents();
ob_clean();
$dir = PHPCMS_ROOT.'/data/tagscache/'.$keyid.'/';
$file = $dir.$mod.'_'.$channelid.'_'.urlencode($name).'.html';
dir_create($dir);
file_put_contents($file, $data);
@chmod($file, 0777);
return $data;
}
function tag_read($keyid, $name)
{
global $CONFIG,$PHP_TIME;
if(!isset($keyid) || !$keyid) return '<span style="color:red">$keyid undefined</span>';
if(defined('CREATEHTML') || $CONFIG['phpcache'] != '1') return tag_data($keyid, $name);
$file = PHPCMS_ROOT.'/data/tagscache/'.$keyid.'/'.urlencode($name).'.html';
if(!file_exists($file) || (filemtime($file) < $PHP_TIME - $CONFIG['phpcacheexpires'])) return tag_write($keyid, $name);
include $file;
}
function tag_data($keyid, $name)
{
global $tags,$mod,$MODULE,$CHANNEL,$CONFIG;
if(!$tags) require PHPCMS_ROOT.'/templates/'.$CONFIG['defaulttemplate'].'/tags.php';
if(is_numeric($keyid))
{
$channelid = intval($keyid);
$module = $CHANNEL[$channelid]['module'];
}
else
{
$channelid = $GLOBALS['channelid'];
$module = $keyid;
}
if(isset($MODULE[$module]))
{
require_once PHPCMS_ROOT.'/'.moduledir($module).'/include/tag.func.php';
eval($tags[$name].';');
}
}
另外: eval($tags[$name].';'); 这句啥意思大虾给点一下
PHPCMS_ROOT.'/templates/'.$CONFIG['defaulttemplate'].'/tags.php'; 这个文件里定义了$tags数组中文标签名对应的函数,比如
复制内容到剪贴板
'专题幻灯片' => 'phpcms_special_slide(0,1,5,24,0,30,250,220,5000,-1)',
'类别导航' => 'phpcms_type(0,$keyid)',
......
'专题文章' => 'article_list(0,1,0,1,2,0,10,30,0,0,0,0,0,0,0,0,0,0,1,\'\')',
'类别最新文章' => 'article_list(0,$channelid,0,1,0,0,10,68,0,$typeid,0,0,0,2,1,0,0,1,1,\'\')',
.......
然后根据module来决定要引入的tag.func.php, module是phpcms就引入根目录/include/tag.func.php, 里面有专门处理以phpcms_开头的标签函数;代码:
$tags = array ('专题幻灯片' => 'phpcms_special_slide(0,1,5,24,0,30,250,220,5000,-1)',
'类别导航' => 'phpcms_type(0,$keyid)',
......
'专题文章' => 'article_list(0,1,0,1,2,0,10,30,0,0,0,0,0,0,0,0,0,0,1,\'\')',
'类别最新文章' => 'article_list(0,$channelid,0,1,0,0,10,68,0,$typeid,0,0,0,2,1,0,0,1,1,\'\')',
.......
module是article就引入根目录/module/article/include/tat.func.php,里面有专门处理以article_开头的标签函数;
难点就在tag.func.php里的函数上,以及怎么新建标签和修改标签,听说新建标签是选择相应的标签模板,不知道啥意思,
大虾们跟帖啊...
老逆你就歇着吧,雷声大,雨点小

[ 本帖最后由 fan12 于 2008-7-21 18:40 编辑 ]
作者: fan12 发布时间: 2008-07-21
掉出首页前给它来一顶
作者: fan12 发布时间: 2008-07-22

呵呵
作者: 逆雪寒 发布时间: 2008-07-23
老大,终于出现了,不过我比你老,
我是要用这个做网站,不是为了学编程, 所以希望有人出来讲,
其实程序不难看懂, 主要是应用逻辑不太了解,所以看起来特别慢
慢慢前行吧
我是要用这个做网站,不是为了学编程, 所以希望有人出来讲,
其实程序不难看懂, 主要是应用逻辑不太了解,所以看起来特别慢
慢慢前行吧
作者: fan12 发布时间: 2008-07-24
eval($tags[$name].';');之后, 相应的tag.func.php里的标签处理函数开始执行, 比如下面是module\article\include\tag.func.php里的函数:
复制PHP内容到剪贴板
{
global $db, $PHP_TIME, $CONFIG, $CHANNEL, $CHA, $CATEGORY, $MODULE, $FIELD, $TEMP, $skindir;
$temp_id = 0;
if($page == 0 && defined('CREATEHTML'))
{
$temp_id = $templateid.$channelid.$catid.$child.$specialid.$page.$articlenum.$titlelen.$introducelen.$typeid.$posid.$datenum.$ordertype.$datetype.$showcatname.$showauthor.$showhits.$target.$cols.$username;
}
if($temp_id && isset($TEMP['tag'][$temp_id]))
{
$articles = $TEMP['tag'][$temp_id];
}
else
{
if(!isset($CHA) || $CHA['channelid'] != $channelid) channel_setting($channelid);
$datetypes = array('', 'Y-m-d', 'm-d', 'Y/m/d', 'Y.m.d', 'Y-m-d H:i:s', 'Y-m-d H:i');
$ordertypes = array('listorder DESC, articleid DESC', 'edittime DESC', 'edittime ASC', 'hits DESC', 'hits ASC', 'comments DESC', 'comments ASC');
$page = isset($page) ? intval($page) : 1;
$specialid = intval($specialid);
$typeid = intval($typeid);
if($datetype < 0 || $datetype > 6) $datetype = 0;
if($ordertype < 0 || $ordertype > 6) $ordertype = 0;
$tablename = $CONFIG['tablepre'].'article_'.$channelid;
$listpages = 0;
$condition = '';
if($catid)
{
if(is_numeric($catid))
{
if($child && $CATEGORY[$catid]['child'] && $CATEGORY[$catid]['arrchildid'])
{
$condition .= ' AND catid IN ('.$CATEGORY[$catid]['arrchildid'].') ';
}
else
{
$condition .= " AND catid=$catid ";
$listpages = 1;
}
}
else
{
$condition .= " AND catid IN ($catid) ";
}
}
if($posid)
{
$articleids = @file_get_contents(PHPCMS_ROOT.'/'.$CHANNEL[$channelid]['channeldir'].'/pos/'.$posid.'.txt');
if($articleids) $condition .= " AND articleid IN($articleids)";
}
if($specialid) $condition .= " AND specialid=$specialid ";
if($typeid) $condition .= " AND typeid=$typeid ";
if($datenum) $condition .= " AND addtime>$PHP_TIME-86400*$datenum ";
if($username) $condition .= " AND username='$username' ";
$offset = $page ? ($page-1)*$articlenum : 0;
if($page && $articlenum)
{
$r = $db->get_one("SELECT SQL_CACHE count(*) AS number FROM $tablename WHERE status=3 $condition ","CACHE");
$pages = $listpages ? listpages($catid, $r['number'], $page, $articlenum) : phppages($r['number'], $page, $articlenum);
}
$ordertype = $ordertypes[$ordertype];
$limit = $articlenum ? " LIMIT $offset, $articlenum " : 'LIMIT 0, 10';
$articles = array();
$result = $db->query("SELECT SQL_CACHE articleid,catid,typeid,title,style,islink,showcommentlink,introduce,author,hits,thumb,addtime,listorder,linkurl $FIELD[$tablename] FROM $tablename WHERE status=3 $condition ORDER BY $ordertype $limit ","CACHE");
while($r = $db->fetch_array($result))
{
$r['adddate'] = $datetype ? date($datetypes[$datetype],$r['addtime']) : '';
$r['linkurl'] = linkurl($r['linkurl']);
$r['stitle'] = style(str_cut($r['title'], $titlelen , '...'), $r['style']);
$r['type'] = $r['typeid'] ? show_type($channelid, $r['typeid']) : '';
$r['introduce'] = $introducelen ? str_cut($r['introduce'], $introducelen , '...') : '';
if($showcatname)
{
$r['catname'] = $CATEGORY[$r['catid']]['catname'];
$r['catlinkurl'] = linkurl($CATEGORY[$r['catid']]['linkurl']);
}
$articles[] = $r;
}
$db->free_result($result);
if($temp_id) $TEMP['tag'][$temp_id] = $articles;
}
if($target) $target = ' target="_blank"';
$width = ceil(100/$cols).'%';
if(!$templateid) $templateid = 'tag_article_list';
include template('article', $templateid);
}
PHP代码:
function article_list($templateid = '', $channelid = 1, $catid = 0, $child = 1, $specialid = 0, $page = 0, $articlenum = 10, $titlelen = 30, $introducelen = 0, $typeid = 0, $posid = 0, $datenum = 0, $ordertype = 0, $datetype = 0, $showcatname = 0, $showauthor = 0, $showhits = 0, $target = 0, $cols = 1, $username = ''){
global $db, $PHP_TIME, $CONFIG, $CHANNEL, $CHA, $CATEGORY, $MODULE, $FIELD, $TEMP, $skindir;
$temp_id = 0;
if($page == 0 && defined('CREATEHTML'))
{
$temp_id = $templateid.$channelid.$catid.$child.$specialid.$page.$articlenum.$titlelen.$introducelen.$typeid.$posid.$datenum.$ordertype.$datetype.$showcatname.$showauthor.$showhits.$target.$cols.$username;
}
if($temp_id && isset($TEMP['tag'][$temp_id]))
{
$articles = $TEMP['tag'][$temp_id];
}
else
{
if(!isset($CHA) || $CHA['channelid'] != $channelid) channel_setting($channelid);
$datetypes = array('', 'Y-m-d', 'm-d', 'Y/m/d', 'Y.m.d', 'Y-m-d H:i:s', 'Y-m-d H:i');
$ordertypes = array('listorder DESC, articleid DESC', 'edittime DESC', 'edittime ASC', 'hits DESC', 'hits ASC', 'comments DESC', 'comments ASC');
$page = isset($page) ? intval($page) : 1;
$specialid = intval($specialid);
$typeid = intval($typeid);
if($datetype < 0 || $datetype > 6) $datetype = 0;
if($ordertype < 0 || $ordertype > 6) $ordertype = 0;
$tablename = $CONFIG['tablepre'].'article_'.$channelid;
$listpages = 0;
$condition = '';
if($catid)
{
if(is_numeric($catid))
{
if($child && $CATEGORY[$catid]['child'] && $CATEGORY[$catid]['arrchildid'])
{
$condition .= ' AND catid IN ('.$CATEGORY[$catid]['arrchildid'].') ';
}
else
{
$condition .= " AND catid=$catid ";
$listpages = 1;
}
}
else
{
$condition .= " AND catid IN ($catid) ";
}
}
if($posid)
{
$articleids = @file_get_contents(PHPCMS_ROOT.'/'.$CHANNEL[$channelid]['channeldir'].'/pos/'.$posid.'.txt');
if($articleids) $condition .= " AND articleid IN($articleids)";
}
if($specialid) $condition .= " AND specialid=$specialid ";
if($typeid) $condition .= " AND typeid=$typeid ";
if($datenum) $condition .= " AND addtime>$PHP_TIME-86400*$datenum ";
if($username) $condition .= " AND username='$username' ";
$offset = $page ? ($page-1)*$articlenum : 0;
if($page && $articlenum)
{
$r = $db->get_one("SELECT SQL_CACHE count(*) AS number FROM $tablename WHERE status=3 $condition ","CACHE");
$pages = $listpages ? listpages($catid, $r['number'], $page, $articlenum) : phppages($r['number'], $page, $articlenum);
}
$ordertype = $ordertypes[$ordertype];
$limit = $articlenum ? " LIMIT $offset, $articlenum " : 'LIMIT 0, 10';
$articles = array();
$result = $db->query("SELECT SQL_CACHE articleid,catid,typeid,title,style,islink,showcommentlink,introduce,author,hits,thumb,addtime,listorder,linkurl $FIELD[$tablename] FROM $tablename WHERE status=3 $condition ORDER BY $ordertype $limit ","CACHE");
while($r = $db->fetch_array($result))
{
$r['adddate'] = $datetype ? date($datetypes[$datetype],$r['addtime']) : '';
$r['linkurl'] = linkurl($r['linkurl']);
$r['stitle'] = style(str_cut($r['title'], $titlelen , '...'), $r['style']);
$r['type'] = $r['typeid'] ? show_type($channelid, $r['typeid']) : '';
$r['introduce'] = $introducelen ? str_cut($r['introduce'], $introducelen , '...') : '';
if($showcatname)
{
$r['catname'] = $CATEGORY[$r['catid']]['catname'];
$r['catlinkurl'] = linkurl($CATEGORY[$r['catid']]['linkurl']);
}
$articles[] = $r;
}
$db->free_result($result);
if($temp_id) $TEMP['tag'][$temp_id] = $articles;
}
if($target) $target = ' target="_blank"';
$width = ceil(100/$cols).'%';
if(!$templateid) $templateid = 'tag_article_list';
include template('article', $templateid);
}
作者: fan12 发布时间: 2008-08-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28