给dedeeims添加tag功能

dedeeims做的是不错,可是相比dedecms来说,少了个tags的功能,有人不需要,但是我相信需要的人还是不在少数的,网上一直也没人放出了修改方法,自己研究了2天,终于搞定,但是提取tags的功能还不是很了解,按道理是从关键词部分直接提取,可是在dedecms中也是提取不成功,希望有人能完善之。转载请注明出处:本文出自:http://www.5756653.cn,相信这个难不倒你吧。

查看tags列表需要模板文件tag.htm和taglist.htm,请从dedecms默认模板中拷贝就行,另外:属于本篇文章的tags调用方法没空去写了,哪位如果有了,请告之。

拿文章功能来讲:

0.dedeeims里是没有tags的数据表的,要先把dedecms中dede_tagindex和dede_taglist两个表复制过来,用sql语句建也行

SQL代码
  1. Drop TABLE IF EXISTS #@__tagindex;  
  2. Create TABLE #@__tagindex (  
  3.   id int(10) unsigned NOT NULL auto_increment,  
  4.   tag char(12) NOT NULL default '',  
  5.   typeid smallint(5) unsigned NOT NULL default '0',  
  6.   count int(10) unsigned NOT NULL default '0',  
  7.   total int(10) unsigned NOT NULL default '0',  
  8.   weekcc int(10) unsigned NOT NULL default '0',  
  9.   monthcc int(10) unsigned NOT NULL default '0',  
  10.   weekup int(10) unsigned NOT NULL default '0',  
  11.   monthup int(10) unsigned NOT NULL default '0',  
  12.   addtime int(10) unsigned NOT NULL default '0',  
  13.   PRIMARY KEY  (id)  
  14. ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
  15.   
  16. Drop TABLE IF EXISTS #@__taglist;  
  17. Create TABLE #@__taglist (  
  18.   tid int(10) unsigned NOT NULL default '0',  
  19.   aid int(10) unsigned NOT NULL default '0',  
  20.   arcrank smallint(6) NOT NULL default '0',  
  21.   typeid smallint(5) unsigned NOT NULL default '0',  
  22.   tag varchar(12) NOT NULL default '',  
  23.   PRIMARY KEY  (tid,aid)  
  24. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;  

1.打开文章的添加页面的功能文件dede/article_add.php,查找“//生成html”,位置比较靠下,在下面插入代码:  

PHP代码
  1. InsertTags($tags,$arcID);  

2.打开添加文章的模板页面 dede/templets/article_add.html ,在合适的位置加上以下文本框代码,是让输入tags用的:

XML/HTML代码
  1. <input name="tags" type="text" class="txt" id="tags" value="" style="width:60%" />  

 3.打开include/archives.func.php,添加及修改函数

首先找到UpIndexKey函数,用dedecms的完整函数替换,并加入InsertTags、InsertOneTag两个函数,所有代码如下: 

PHP代码
  1. /** 
  2.  *  更新微表key及Tag 
  3.  * 
  4.  * @access    public 
  5.  * @param     int  $id  文档ID 
  6.  * @param     string  $arcrank  权限值 
  7.  * @param     int  $typeid  栏目ID 
  8.  * @param     int  $sortrank  排序ID 
  9.  * @param     string  $tags  tag标签 
  10.  * @return    string 
  11.  */  
  12. if ( ! function_exists('UpIndexKey'))  
  13. {  
  14.     function UpIndexKey($id$arcrank$typeid$sortrank=0, $tags='')  
  15.     {  
  16.         global $dsql,$typeid2;  
  17.         if(empty($typeid2)) $typeid2 = 0;  
  18.         $addtime = time();  
  19.         $query = " Update #@__arctiny SET arcrank='$arcrank', typeid='$typeid', typeid2='$typeid2', sortrank='$sortrank' Where id = '$id' ";  
  20.         $dsql->ExecuteNoneQuery($query);  
  21.   
  22.         /* 
  23.         * 处理修改后的Tag 
  24.         */  
  25.         if($tags!='')  
  26.         {  
  27.             $oldtag = GetTags($id);  
  28.             $oldtags = explode(',',$oldtag);  
  29.             $tagss = explode(',',$tags);  
  30.             foreach($tagss as $tag)  
  31.             {  
  32.                 $tag = trim($tag);  
  33.                 if(isset($tag[12]) || $tag!=stripslashes($tag))  
  34.                 {  
  35.                     continue;  
  36.                 }  
  37.                 if(!in_array($tag,$oldtags))  
  38.                 {  
  39.                     InsertOneTag($tag,$id);  
  40.                 }  
  41.             }  
  42.             foreach($oldtags as $tag)  
  43.             {  
  44.                 if(!in_array($tag,$tagss))  
  45.                 {  
  46.                     $dsql->ExecuteNoneQuery("Delete FROM #@__taglist Where aid='$id' AND tag LIKE '$tag' ");  
  47.                     $dsql->ExecuteNoneQuery("Update #@__tagindex SET total=total-1 Where tag LIKE '$tag' ");  
  48.                 }  
  49.                 else  
  50.                 {  
  51.                     $dsql->ExecuteNoneQuery("Update #@__taglist SET arcrank = '$arcrank', typeid = '$typeid' Where tag LIKE '$tag' ");  
  52.                 }  
  53.             }  
  54.         }  
  55.     }  
  56. }  
  57.   
  58.   
  59. /** 
  60.  *  插入Tags 
  61.  * 
  62.  * @access    public 
  63.  * @param     string  $tag  tag标签 
  64.  * @param     int  $aid  文档AID 
  65.  * @return    void 
  66.  */  
  67. if ( ! function_exists('InsertTags'))  
  68. {  
  69.     function InsertTags($tag$aid)  
  70.     {  
  71.         $tags = explode(',',$tag);  
  72.         foreach($tags as $tag)  
  73.         {  
  74.             $tag = trim($tag);  
  75.             if(isset($tag[20]) || $tag!=stripslashes($tag))  
  76.             {  
  77.                 continue;  
  78.             }  
  79.             InsertOneTag($tag,$aid);  
  80.         }  
  81.     }  
  82. }  
  83.   
  84.   
  85. /** 
  86.  *  插入一个tag 
  87.  * 
  88.  * @access    public 
  89.  * @param     string  $tag  标签 
  90.  * @param     int  $aid  文档AID 
  91.  * @return    void 
  92.  */  
  93. if ( ! function_exists('InsertOneTag'))  
  94. {  
  95.     function InsertOneTag($tag$aid)  
  96.     {  
  97.         global $typeid,$arcrank,$dsql;  
  98.         $tag = trim($tag);  
  99.         if($tag == '')  
  100.         {  
  101.             return '';  
  102.         }  
  103.         if(empty($typeid))  
  104.         {  
  105.             $typeid = 0;  
  106.         }  
  107.         if(empty($arcrank))  
  108.         {  
  109.             $arcrank = 0;  
  110.         }  
  111.         $rs = false;  
  112.         $addtime = time();  
  113.         $row = $dsql->GetOne("Select * FROM #@__tagindex Where tag LIKE '$tag' ");  
  114.         if(!is_array($row))  
  115.         {  
  116.             $rs = $dsql->ExecuteNoneQuery(" Insert INTO #@__tagindex(tag,typeid,count,total,weekcc,monthcc,weekup,monthup,addtime) VALUES('$tag','$typeid','0','1','0','0','$addtime','$addtime','$addtime'); ");  
  117.             $tid = $dsql->GetLastID();  
  118.         }  
  119.         else  
  120.         {  
  121.             $rs = $dsql->ExecuteNoneQuery(" Update #@__tagindex SET total=total+1,addtime=$addtime Where tag LIKE '$tag' ");  
  122.             $tid = $row['id'];  
  123.         }  
  124.         if($rs)  
  125.         {  
  126.             $dsql->ExecuteNoneQuery("Insert INTO #@__taglist(tid,aid,arcrank,typeid , tag) VALUES('$tid','$aid','$arcrank','$typeid' , '$tag'); ");  
  127.         }  
  128.     }  
  129. }  

 4.复制dedecms中include/arc.taglist.class.php至dedeeims的include文件夹中,查找 ,tp.moresite,tp.siteurl,tp.sitepath 并删除之,注意前面的小逗号一并删除,因为dede_archives表中没有这三个字段,否则会报错。

5.include/dedetag.class.php文件,查找function SetDefault(),在此函数后加入以下语句:

PHP代码
  1. /** 
  2.     *  强制引用 
  3.     * 
  4.     * @access    public 
  5.     * @param     object  $refObj  隶属对象 
  6.     * @return    void 
  7.     */  
  8.    function SetRefObj(&$refObj)  
  9.    {  
  10.        $this->refObj = $refObj;  
  11.    }  

 6.文章修改部分
①在dede/article_edit.php中查找“//生成HTML”,下面一句是“UpIndexKey($id,$arcrank,$typeid,$sortrank,‘’);”,把最后的一个引号改为“$tags”,使之变成“UpIndexKey($id,$arcrank,$typeid,$sortrank,$tags);”

②打开include/common.func.php,查找“function GetTags($aid)”,原文件这个函数功能函数是空的,咱们把这个函数修改为以下内容:

PHP代码
  1. /**  
  2.  *  获得某文档的所有tag  
  3.  *  
  4.  * @param     int     $aid  文档id  
  5.  * @return    string  
  6.  */  
  7. if ( ! function_exists('GetTags'))   
  8. {   
  9.     function GetTags($aid)   
  10.     {   
  11.         global $dsql;   
  12.         $tags = '';   
  13.         $query = "Select tag FROM #@__taglist Where aid='$aid' ";   
  14.         $dsql->Execute('tag',$query);   
  15.         while($row = $dsql->GetArray('tag'))   
  16.         {   
  17.             $tags .= ($tags=='' ? $row['tag'] : ','.$row['tag']);   
  18.         }   
  19.         return $tags;   
  20.     }   
  21. }  

③在后台的dede/templets/article_edit.htm文件中添加tag标签的文本框

XML/HTML代码
  1. <input name="tags" type="text" class="txt" id="tags" value="<?php echo $tags; ?>" style="width:60%" />  

 7.后台部分
①复制dedecms中dede目录中的tags_main.php,到dedeeims的dede目录中,复制模板文件dede/templets/tags_main.htm到dedeeims的dede的同路径文件夹中。在后台菜单中添加

XML/HTML代码
  1. <m:item name='TAG标签管理' link='tags_main.php' rank='sys_Tags' target='main' />  

菜单文件在dede/inc/inc_menu.php中,需要放在什么地方就添加在哪里。另外在inc_action_info.php及inc_menu_map.php两个文件中也有需要修改的地方,自己添加,这两个文件并不重要。

8.产品部分

1.dede/product_add.php 查找//生成html下面插入

XML/HTML代码
  1. InsertTags($tags,$arcID);   

2.dede/product_edit.php 查找//生成HTML,下面一句替换

XML/HTML代码
  1. UpIndexKey($id,$arcrank,$typeid,$sortrank,$tags);  

3.dede/templets/product_add.htm 在合适位置添加

XML/HTML代码
  1. <input name="tags" type="text" class="txt" id="tags" value="" style="width:80%" />  

4.dede/templets/product_add.htm 在合适位置添加

XML/HTML代码
  1. <input name="tags" type="text" class="txt" id="tags" value="<?php echo $arcRow["tags"]?>" style="width:60%" />  

 5.archives部分貌似不添加自定义模型的话是用不上的,这个修改方法类似。只要修改后台文件和模板文件即可

转载请注明出处:本文出自:http://www.5756653.cn,

 

 

未经允许不得转载:Windy's Blog » 给dedeeims添加tag功能

赞 (0)