y8q 发表于 2012-4-18 10:45:26

织梦DEDECMS模板网站文章模型发布过程解析

织梦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();
               }
页: [1]
查看完整版本: 织梦DEDECMS模板网站文章模型发布过程解析