帝国论坛帝国网站管理系统交流区帝国CMS使用交流[分享]用关键词批量替换TAGS的最佳方法(新增批量复制TAG到关键词) 【本版专题贴子】  
 1/4     1 2 3 4 ›› ›|
主题:[分享]用关键词批量替换TAGS的最佳方法(新增批量复制TAG到关键词) [加入收藏夹]   

chongeryan
用户头衔:书生

精华贴   :0
发贴数   :9
经验值   :93
注册时间:2009-10-26
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 1 楼]
[分享]用关键词批量替换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 ]



2011-05-21 16:28:17 已设置保密 顶部 回复 引用 报告 编辑 删除

chongeryan
用户头衔:书生

精华贴   :0
发贴数   :9
经验值   :93
注册时间:2009-10-26
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 2 楼]
批量复制TAG到关键词
继续改造本方法,现在可以批量替换完TAG后,将其批量复制到关键词字段.

具体的操作方法如下:

A、以下代码加入到admin/ecmsinfo.php,在任意2个elseif中间插入就行



elseif($enews=="CopyTag2Key")//列表批量复制Tags为关键词
{
        $classid=$_POST['classid'];
        $id=$_POST['id'];
    $newstime=time();   
    eCopyTag2Key($classid,$id,$newstime);
}


注:其实classid和newstime这两个参数取或不取都可以,保留着方便以后扩展^_^


B、将以下代码加入到class/uesrfun.php


//批量复制TAGS到关键词
function eCopyTag2Key($classid,$id,$newstime){
        global $empire,$dbtbpre,$class_r;
    $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,keyboard from {$dbtbpre}ecms_".$tbname." where id='$id[$i]'");//从信息表中取infotags和keyboard值
        $taga=$t['infotags'].",".$t['keyboard']; //组合TAGS:在原有的infotags值上加上新keyboard
        $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];
        }
        $empire->query("update {$dbtbpre}ecms_".$tbname." set keyboard='".trim($newtags[$i],",")."' where id='$id[$i]'");//将新生成的keyboard写入到表中

        }
    printerror("已成功将TAGS批量复制到关键词字段", "", 1, 0, 1);
}




C、修改e/data/html/list/文件夹内的listinfo.php:
找到

        <tr>
        <td width="68%" height="25">
              <font color="#666666">备注:多选框蓝色为未审核信息;发布者红色为会员投稿;信息ID粗体为未生成,点击ID可刷新页面.</font>
            </td>
         </tr>


修改为:


        <tr>
        <td width="88%"><input type="text" name="add_listtags" id="add_listtags" size="50" value="" />&nbsp;&nbsp;
        <input type="submit" name="Submit100" value="批量添加TAGS" onClick="document.listform.enews.value='AddTags_all';document.listform.action='ecmsinfo.php';">&nbsp;&nbsp;<input type="submit" name="Submit99" value="批量复制TAGS" onClick="document.listform.enews.value='CopyTag2Key';document.listform.action='ecmsinfo.php';">
        </td>
        </tr>
        <tr>
        <td width="68%" height="25">
        <font color="#666666"><p>备注:1.先选中要操作的ID,然后在左侧文本框内直接输入多个关键词,以","隔开;然后点击批量添加TAGS即可;之后可点击"批量复制TAGS"将TAG复制到关键词字段.</p><p>2.多选框蓝色为未审核信息;发布者红色为会员投稿;信息ID粗体为未生成,点击ID可刷新页面.</p></font>
        </td>
        </tr>





上传以下附件:
[下载 *.rar](文件大小:6.56 KB,下载次数:60)

[该贴被修改 2 次,最后修改时间 2011-05-21 23:10:28 ]



2011-05-21 21:43:08 已设置保密 顶部 回复 引用 报告 编辑 删除

viewsnake
用户头衔:进士

精华贴   :0
发贴数   :574
经验值   :2097
注册时间:2006-05-08
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 3 楼]

谢谢楼主分享



我是viewsnake!
2011-05-21 22:12:07 已设置保密 顶部 回复 引用 报告 编辑 删除

chongeryan
用户头衔:书生

精华贴   :0
发贴数   :9
经验值   :93
注册时间:2009-10-26
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 4 楼]

已经对方法进行再次改造,二楼新增"批量复制TAG到关键词 "功能.自动取关键词并不可靠,批量替换和复制才是王道.希望WC把这一功能加入到ECMS的后续版本中.

有对本问题需要探讨的,请到舍得学苑的舍得茶室发帖讨论:
http://emagic.org.cn

[该贴被修改 1 次,最后修改时间 2011-05-21 23:15:14 ]



2011-05-21 23:13:19 已设置保密 顶部 回复 引用 报告 编辑 删除

chongeryan
用户头衔:书生

精华贴   :0
发贴数   :9
经验值   :93
注册时间:2009-10-26
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 5 楼]

演示:
用一,二楼所用方法生成的TAG页面:
http://el.emagic.org.cn/e/tags/?tagid=285




2011-05-21 23:17:28 已设置保密 顶部 回复 引用 报告 编辑 删除

fzs
用户头衔:探花

精华贴   :0
发贴数   :2345
经验值   :7070
注册时间:2008-06-25
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 6 楼]

好东西,搜藏了。



不好意思说!
2011-05-21 23:49:28 已设置保密 顶部 回复 引用 报告 编辑 删除

ibook
用户头衔:探花

精华贴   :0
发贴数   :2176
经验值   :6379
注册时间:2010-06-29
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 7 楼]

支持一下




2011-05-22 00:28:48 已设置保密 顶部 回复 引用 报告 编辑 删除

秋天的无名
用户头衔:举人

精华贴   :0
发贴数   :115
经验值   :956
注册时间:2009-05-08
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 8 楼]

谢谢分享,收藏了



www.suabao.com
2011-05-22 14:35:21 已设置保密 顶部 回复 引用 报告 编辑 删除

8877
用户头衔:进士

精华贴   :0
发贴数   :1195
经验值   :4216
注册时间:2006-06-15
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 9 楼]

不错不错!




2011-05-22 20:45:33 已设置保密 顶部 回复 引用 报告 编辑 删除

麦蒂
用户头衔:探花

精华贴   :0
发贴数   :6368
经验值   :17545
注册时间:2009-03-06
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 10 楼]

支持




2011-05-23 07:57:45 已设置保密 顶部 回复 引用 报告 编辑 删除
 1/4     1 2 3 4 ›› ›|

快速回复
内容

表情
使用EBB代码 使用smile代码 显示签名 自动分析url 自动分析img
     【进入高级模式】   (按 Ctrl+Enter 直接提交)
    顶部  加入收藏夹
关于帝国 | 广告服务 | 联系我们 | 法律声明 | 隐私条款 | 许可协议
Powered by: EBB Version 2.2.1