织梦DedeCMS模板网站文章模型发布过程解析:
很多从事二次开发的新手不知道从什么地方动手,首先第一步要分析代码,第一步是测试。只有分析了过程才更有利做开发。这里我们整理了一下dedecms文章发布的过程:
首先,是发布文章的文件:article_add.php;
article_add.php通过article_add.htm表单获取要发布的文章内容及各个文章属性参数,并对这些参数进行函数处理。
然后通过调用include下面的archives.func.php里面的GetIndexKey函数,在微表(其实这才是主表)dede__arctiny中插入一条数据,也即从此获得了该文章的在整个网站内的唯一标识id(此字段是自增的),并被引用到文章的属性表--主表dede_archives中,同时文章的具体内容则存放在了附加表dede_addonarticle中,此时被引用的id标识字段是aid.
【对于自定义模型,可以选择不使用主表dede_archives,则在附加表里面建立最基本的属性】
其它类型的数据大致如此。
织梦dedecms模板就是用这个唯一标识一根红线将各种表现、查询串接了起来。
//生成文档ID
$arcID = GetIndexKey($arcrank,$typeid,$sortrank,$channelid,$senddate,$adminid);
function GetIndexKey($arcrank,$typeid,$sortrank=0,$channelid=1,$senddate=0,$mid=1)
{
global $dsql,$senddate,$typeid2;
if(empty($typeid2)) $typeid2 = 0;
if(empty($senddate)) $senddate = time();
if(empty($sortrank)) $sortrank = $senddate;
$iquery = "
INSERT INTO `dede_arctiny` (`arcrank`,`typeid`,`typeid2`,`channel`,`senddate`, `sortrank`, `mid`)
VALUES ('$arcrank','$typeid','$typeid2' , '$channelid','$senddate', '$sortrank', '$mid') ";
$dsql->ExecuteNoneQuery($iquery);
$aid = $dsql->GetLastID();
return $aid;
}
//保存到主表
$query = "INSERT INTO `dede_archives`(id,typeid,typeid2,sortrank,flag,ismake,channel,arcrank,click,money,title,shorttitle,
color,writer,source,litpic,pubdate,senddate,mid,notpost,description,keywords,filename,dutyadmin,weight)
VALUES ('$arcID','$typeid','$typeid2','$sortrank','$flag','$ismake','$channelid','$arcrank','$click','$money',
'$title','$shorttitle','$color','$writer','$source','$litpic','$pubdate','$senddate',
'$adminid','$notpost','$description','$keywords','$filename','$adminid','$weight');";
if(!$dsql->ExecuteNoneQuery($query))
{
$gerr = $dsql->GetError();
$dsql->ExecuteNoneQuery("Delete From `dede_arctiny` where id='$arcID'");
ShowMsg("把数据保存到数据库主表 `dede_archives` 时出错,请把相关信息提交给DedeCms官方。".str_replace('"','',$gerr),"java script:;");
exit();
}
//保存到附加表
$cts = $dsql->GetOne("Select addtable From `dede_channeltype` where id='$channelid' ");
$addtable = trim($cts['addtable']);
if(empty($addtable))
{
$dsql->ExecuteNoneQuery("Delete From `dede_archives` where id='$arcID'");
$dsql->ExecuteNoneQuery("Delete From `dede_arctiny` where id='$arcID'");
ShowMsg("没找到当前模型[{$channelid}]的主表信息,无法完成操作!。","java script:;");
exit();
}
$useip = GetIP();
$templet = empty($templet) ? '' : $templet;
$query = "INSERT INTO `{$addtable}`(aid,typeid,redirecturl,templet,userip,body{$inadd_f}) Values('$arcID','$typeid','$redirecturl','$templet','$useip','$body'{$inadd_v})";
if(!$dsql->ExecuteNoneQuery($query))
{
$gerr = $dsql->GetError();
$dsql->ExecuteNoneQuery("Delete From `dede_archives` where id='$arcID'");
$dsql->ExecuteNoneQuery("Delete From `dede_arctiny` where id='$arcID'");
ShowMsg("把数据保存到数据库附加表 `{$addtable}` 时出错,请把相关信息提交给DedeCms官方。".str_replace('"','',$gerr),"java script:;");
exit();
} |