[分享]用关键词批量替换TAGS的最佳方法(新增批量复制TAG到关键词)
思路: 1.用SQL语句将关键词字段复制到infotags字段; 2.在信息管理列表页选中要更新的页面,点击按钮,批量将infotags写入enewstagsdata和enewstags这两个表; 3.可以在文本框中输入多个关键词(用","隔开);
注意: 2楼添加"批量复制TAGS(到关键词字段)的功能;适合像舍得这样的懒人使用,结合批量替换TAGS的方法,现在不用一个个手工编辑关键词了.可恨的是今晚在这方法出来之前,舍得居然手工修改了100多个关键词页面!
本文所用的方法系改造自龙族发布的"[原创]6.6信息管理列表页批量添加TAGS"(http://bbs.phome.net/ShowThread?threadid=190580&forumid=13) 与龙族的方法不同的是,他只能一次加一个TAG,而舍得所用的方法是直接将infotags字段中的内容写入enewstagsdata和enewstags这两个表.另外友情提醒一下,龙族所发代码中有一处错误,
$empire->query("insert into {$dbtbpre}enewstags(tagname,num,isgood,cid) values('$tagname',1,0,0);");
应为:
$empire->query("insert into {$dbtbpre}enewstags(tagname,num,isgood,cid) values('$tags',1,0,0);");
具体的操作方法如下: 一.执行sql语句: update phome_ecms_news set infotags=keyboard update phome_ecms_download set infotags=keyboard 如果不想替换掉infotags内有内容的字段,则可以这样写: update phome_ecms_news set infotags=keyboard where infotags =''
此操作是为了将关键词字段(keyboard)的内容复制到TAG字段(infotags). 如果有多个表,按照此格式执行即可,不再赘述.
二.修改下列文件: A、以下代码加入到admin/ecmsinfo.php,在任意2个elseif中间插入就行
elseif($enews=="AddTags_all")//列表批量添加Tags { $classid=$_POST['classid']; $id=$_POST['id']; $tags=$_POST['add_listtags']; $newstime=time(); eInsertTags2($tags,$classid,$id,$newstime); }
B、将以下代码加入到class/uesrfun.php
//加入TAG表 function eInsertTags2($tags,$classid,$id,$newstime){ global $empire,$dbtbpre,$class_r; $tags = RepPostVar($tags); //$tag = explode(",", $tags); $count = count($id); //统计ID数量 if (empty($count)) {//如果id没选中 printerror("未选择信息ID", "", 1, 0, 1); } $classid=(int)$classid; $id[$i] = (int)$id[$i]; $mid=(int)$class_r[$classid][modid];//取modid值 for($i=0;$i<$count;$i++) { $tbname=$class_r[$classid][tbname];//获取表名 $t = $empire->fetch1("select infotags from {$dbtbpre}ecms_".$tbname." where id='$id[$i]'");//从信息表中取infotags值 $taga=$t['infotags'].",".$tags; //组合TAGS:在原有的infotags值上加上新tag $tagb[$i] = explode(",",$taga); //设置数组:用,分割tag $tagc=array_values(array_unique($tagb[$i])); //数组排重:排除重复? for($t=0;$t<count($tagb[$i]);$t++) {//二级子循环TAGS数组输出 $newtags[$i].= ",".$tagc[$t]; $r=$empire->fetch1("select tagid from {$dbtbpre}enewstags where tagname='$tagc[$t]' limit 1");//查询有无同名的tag if($r[tagid]) {//如果有tagid,即enewstags表中有相同tag $datar=$empire->fetch1("select tagid,classid,newstime from {$dbtbpre}enewstagsdata where tagid='$r[tagid]' and id='$id[$i]' and mid='$mid' limit 1");//用tagid,id和mid对enewstagsdata进行查询 if($datar[tagid]) {//如果有数据 if($datar[classid]!=$classid||$datar[newstime]!=$newstime) {//如果classid和newstime不相同 $empire->query("update {$dbtbpre}enewstagsdata set classid='$classid',newstime='$newstime' where tagid='$r[tagid]' and id='$id[$i]' and mid='$mid' limit 1");//则开始更新 } } else {//查询后没有此数据,则先更新enewstags表,在数量上加1 $empire->query("update {$dbtbpre}enewstags set num=num+1 where tagid='$r[tagid]'"); $empire->query("update {$dbtbpre}ecms_".$tbname." set infotags='".trim($newtags[$i],",")."' where id='$id[$i]'");//然后在信息表infotags字段中加上这个新tag,如果按舍得的方法,这一步就可以免了 $empire->query("insert into {$dbtbpre}enewstagsdata(tagid,classid,id,newstime,mid) values('$r[tagid]','$classid','$id[$i]','$newstime','$mid');");//然后在enewstagsdata表中插入这些数据 } } else {//如果没有此tag $empire->query("update {$dbtbpre}ecms_".$tbname." set infotags='".trim($newtags[$i],",")."' where id='$id[$i]'");//先在信息表中加上此tag,如果按舍得的方法,这一步就可以免了 $empire->query("insert into {$dbtbpre}enewstags(tagname,num,isgood,cid) values('$tagc[$t]',1,0,0);");//在enewstags表中插入新值 $tagid=$empire->lastid();//把这个tagid给取出来 $empire->query("insert into {$dbtbpre}enewstagsdata(tagid,classid,id,newstime,mid) values('$tagid','$classid','$id[$i]','$newstime','$mid');");//既然是没有tagid的,那就在enewstagsdata也得插入新值(不用再查询) } }
} printerror("批量添加TAGS成功", "", 1, 0, 1); }
C、修改e/data/html/list/文件夹内的listinfo.php: 找到
<td width="68%" height="25"> <font color="#666666">备注:多选框蓝色为未审核信息;发布者红色为会员投稿;信息ID粗体为未生成,点击ID可刷新页面.</font> </td>
在前面加入:
<td width="32%"><input type="text" name="add_listtags" id="add_listtags" size="50" value="" /> <input type="submit" name="Submit100" value="批量添加TAGS" onClick="document.listform.enews.value='AddTags_all';document.listform.action='ecmsinfo.php';"> </td>
在这个文本框中,你如果不输入任何内容,则是对现有的infotags进行处理,如果输入多个关键词(用','隔开),则会加新的关键词一并加入. 事实上,我们可以用这种方式做出批量添加关键词的功能来.或者是,当关键词和TAGS两个内容都是空的时候,先用此方法添加TAG,然后再用SQL语句将TAG字段复制到关键词中去. 反正这样一来,舍得觉得方便了许多.
不要感谢哥,感谢龙族吧.如果没有他先写的那段代码,就不会有舍得写的这些内容. [b][/b][color=Red][/color]
上传以下附件: [下载 *.rar](文件大小:6.30 KB,下载次数:120)
|
[该贴被修改 2 次,最后修改时间 2011-05-21 22:57:01 ]
|