我们在织梦后台想要编辑一篇文章的属性,里面可供编辑的项目是有限的,例如我想快速编辑一篇文章的tag标签,只能先打开文章修改页面来修改很是麻烦,有了这个添加TAG标签的功能就简单多了和添加关键词一样简单。先看下成功的样子:

要达到上图这种可以在后台直接添加或者修改tag标签要怎么做呢,具体看下面:
第一步:打开/dede/archives_do.php,大约第582行找到如下代码:
require_once(DEDEADMIN."/inc/inc_catalog_options.php");
在下面增加如下代码:
require_once(DEDEINC."/dedetag.class.php"); $tags = GetTags($aid);
如下图这样:

第二步:还是archives_do.php这个文件在大约670行找到如下代码:
<tr height='32'> <td width="80" class='bline'> 关键字:</td> <td class='bline'> <input name="keywords" type="text" id="keywords" value="<?php echo $arcRow['keywords']; ?>" style="width:70%" /> </td> </tr>
在下面添加如下代码:
<tr height='32'> <td width="80" class='bline'> TAG标签:</td> <td class='bline'> <input name="tags" type="text" id="tags" value="<?php echo $tags; ?>" style="width:70%" /> </td> </tr>
如下图这样:

第三步:大概在742行找到如下代码:
if($typeid != $oldtypeid) { $addtable = trim($addtable); if(empty($addtable)) $addtable = '【数据表前缀】_addonarticle'; else $addtable = preg_replace("#[^a-z0-9__#@-]#i", "", $addtable); $dsql->ExecuteNoneQuery(" UPDATE `$addtable` SET typeid='$typeid' WHERE aid='$aid' "); }
在其下面添加如下代码:
if ($tags!='') { $oldtag = GetTags($aid); $oldtags = explode(',', $oldtag); $tagss = explode(',', $tags); foreach($tagss as $tag) { $tag = trim($tag); if (isset($tag[12]) || $tag != stripslashes($tag)) { continue; } if (!in_array($tag, $oldtags)) { InsertOneTag($tag, $aid); } } foreach($oldtags as $tag) { if (!in_array($tag, $tagss)) { $dsql->ExecuteNoneQuery("DELETE FROM `【数据表前缀】_taglist` WHERE aid='$aid' AND tag LIKE '$tag' "); $dsql->ExecuteNoneQuery("UPDATE `【数据表前缀】_tagindex` SET total=total-1 WHERE tag LIKE '$tag' "); } else { $dsql->ExecuteNoneQuery("UPDATE `【数据表前缀】_taglist` SET `arcrank` = '$arcrank', `typeid` = '$typeid', aid='$aid' WHERE tag LIKE '$tag' "); } } }
如下图这样:

第四步:打开/dede/js/list.js,找到第72行(注意不是最后一行),把最后的300px修改为330px即可。如下图这样:

到此功能已经实现了,看下我的效果:

PS如果你跟我一样如果tag为空就啥也不显示,如果不为空就显示本文关键词或文本tag然后后面加上tag,如下图:
没有tag的情况下

在有tag的情况下

那么可以用我下面的这段代码,写得比较傻瓜但是很容易懂。
{dede:tag row='1' sort='new' getall='0'} [field:tag runphp='yes'/] if(@me=='') { @me = '' ;} else [email protected] = "本文关键字:"; } [/field:tag] {/dede:tag} {dede:tag row='10' sort='new' getall='0'} [field:tag runphp='yes'/] if(@me=='') { @me = '' ;} else [email protected] = "@me "; } [/field:tag] {/dede:tag}
代码中循环了两次第一次的是目的是判断tag是否为空如果为空就不输出内容,如果不为空就输出指定的文字(注:“row必须要=1,否则tag有多少你指定的文字就会循环输出多少次”);第二次的目的是判断tag是否为空如果为空就不输出内容,如果不为空就输出最大10个tag。其实还有一个简单的代码就是给tag增加autoindex,用自增判断第一个就输出文字,其他不输出就行。
实际使用中我发现有个问题就是后台删不掉写好的tag,删除了又有了我们可以删除以后加一个空格就解决了。
既然研究tag了就得搞到底虽然本文修改tag标签很快但也得一篇一篇文章的修改,能不能批量添加呢?比发后台所有文章全选给它们全部加一个或多个tag标签?需要这种功能的可以看这篇文章: