织梦后台文章批量添加 TAG 的实现教程

摘要:织梦 CMS 为已发布的文章添加 TAG,有时候会让你无可奈何,因为后台没有批量添加 TAG 的功能,要是每篇文章都点进去添加 TAG 标签的话,工作量是非常大的,废时又废力,所以本文教你如何实现批量添加 TAG 的功能。整个操作共需要修改三个文件,都是在后台目录(默认为 dede),分别是:content_list.htm、list.js、archives_do.php。

织梦 CMS 为已发布的文章添加 TAG,有时候会让你无可奈何,因为后台没有批量添加 TAG 的功能,要是每篇文章都点进去添加 TAG 标签的话,工作量是非常大的,废时又废力,所以本文教你如何实现批量添加 TAG 的功能。

整个操作共需要修改三个文件,都是在后台目录(默认为 dede),分别是 content_list.htm、list.js、archives_do.php。

1. 打开 dede/templets/content_list.htm,查找:

<a href="javascript:;" onClick="cAtts('attsDel',event,this)" class="coolbg">&nbsp;删除属性&nbsp;</a>

在下面添加:

<a href="javascript:;" onClick="addTags('tagsAdd',event,this)" class="coolbg">&nbsp;增加TAG&nbsp;</a>

2. 打开 dede/js/list.js,在文件的结尾,添加以下代码:

function addTags(jname, e, obj)
{
	var qstr=getCheckboxItem();
	if(qstr=='')
	{
		alert('必须选择一个或多个文档!');
		return;
	}
	LoadQuickDiv(e, 'archives_do.php?dopost=tagsDlg&qstr='+qstr+'&dojob='+jname+'&rnd='+Math.random(), 'tagsDlg', '450px', '160px');
	ChangeFullDiv('show');
}

注意:修改完毕后把这个 list.js 强制刷新下,以免有缓存存在。

3. 打开 dede/archives_do.php,将文件的最后四行代码:

<?php
//AJAX窗体结束
}
?>

替换为:

<?php
//AJAX 窗体结束
}
/*--------------------------
//获得批量TAG处理的AJAX窗体
function tagsDlg(){ }
---------------------------*/
else if ($dopost == 'tagsDlg')
{
    if( !empty($aid) && empty($qstr) )
    {
        $qstr = $aid;
    }
    $dojobname = '修改TAG标签';
    AjaxHead();
    //输出AJAX可移动窗体
    $divname = 'tagsDlg';
    echo "<div class='title' onmousemove=\"DropMoveHand('{$divname}', 225);\" onmousedown=\"DropStartHand();\" onmouseup=\"DropStopHand();\">";
    echo "    <div class='titLeft'>{$dojobname}</div>";
    echo "    <div class='titRight'><img src='images/ico-close.gif' style='cursor:pointer;' onclick='HideObj(\"{$divname}\");ChangeFullDiv(\"hide\");' /></div>";
    echo "</div>";
    echo "<form name='quickeditform' action='archives_do.php' method='post'>";
    echo "<input type='hidden' name='dopost' value='{$dojob}' />";
    echo "<input type='hidden' name='qstr' value='{$qstr}' />";
    echo "<table width='100%' style='margin-top:6px;z-index:9000;'>";
?>
<tr height='28'>
    <td width="80" class='bline'>&nbsp;标 签:</td>
    <td class='bline'>
        <input type='text' name='tags' id="tags" value='' /> (','号分隔,单个标签小于12字节)
    </td>
</tr>
<tr height='32'>
    <td width="80" class='bline'>&nbsp;文档ID:</td>
    <td>
        <input type='text' name='tmpids' value="<?php echo $qstr; ?>" style='width:310px;overflow:hidden;' />
    </td>
</tr>
<tr height='32'>
    <td colspan='2' align='center' style='padding-top:12px'>
        <input name="imageField" type="image" src="images/button_ok.gif" width="60" height="22" class="np" border="0" style="cursor:pointer" />
        &nbsp;&nbsp;
        <img src="images/button_back.gif" width="60" height="22" border="0" onclick='HideObj("<?php echo $divname; ?>");ChangeFullDiv("hide");' style="cursor:pointer" />
    </td>
</tr>
</table>
</form>
<?php
//AJAX 窗体结束
}
/*------------------------
* 批量添加TAG
* function tagsAdd(){}
-------------------------*/
elseif ($dopost == 'tagsAdd'){
    //CheckPurview('a_Commend,sys_ArcBatch');
    if( !empty($aid) && empty($qstr) )
    {
        $qstr = $aid;
    }
    if($qstr=='')
    {
        ShowMsg("参数无效!", $ENV_GOBACK_URL);
        exit();
    }
    if(empty($tags))
    {
        ShowMsg("必需输入tags标签!", $ENV_GOBACK_URL);
        exit();
    }
    $tags = str_replace(',', ',', $tags);
    $tagss = explode(',',$tags);
    if(empty($tagss)){
    ShowMsg("必需输入tags标签!", $ENV_GOBACK_URL);
    exit();
} 
$arcids = ereg_replace('[^0-9,]','',ereg_replace('`', ',', $qstr));
$arcids_arr = explode(',', $arcids);
if (empty($arcids_arr)) {
    ShowMsg("参数无效!", $ENV_GOBACK_URL);
    exit();
} 
foreach($arcids_arr as $id){
    //处理修改后的Tag
    $oldtag = GetTags($id);
    $oldtags = explode(',',$oldtag);
    foreach($tagss as $tag)
    {
        $tag = trim($tag);
        if(isset($tag[255]) || $tag!=stripslashes($tag))
        {
            continue;
        }
        if(!in_array($tag,$oldtags))
        {
            InsertOneTag($tag,$id);
        }
    }
    foreach($oldtags as $tag)
    {
        if(!in_array($tag,$tagss))
        {
            $dsql->ExecuteNoneQuery("Delete From `js_taglist` where aid='$id' And tag like '$tag' ");
            $dsql->ExecuteNoneQuery("Update `js_tagindex` set total=total-1 where tag like '$tag' ");
        }
        else
        {
            $dsql->ExecuteNoneQuery("Update `js_taglist` set `arcrank` = '$arcrank', `typeid` = '$typeid' where tag like '$tag' ");
        }
    }
}
ShowMsg("成功修改选中文档的tags标签!", $ENV_GOBACK_URL);
exit();
}

完成。

如果出现以下错误,原因为 PHP 版本过高。

Fatal error: Uncaught Error: Call to undefined function ereg_replace() in 
/wwwroot/dedenotes/dede/archives_do.php:1078 Stack trace: #0 {main} thrown in 
/wwwroot/dedenotes/dede/archives_do.php on line 1078

ereg_replace() 的问题,这个东西在 PHP 7.x 以后就不存在了,匹配语法也从 ereg syntax (POSIX) 改成了 preg syntax (PCRE)。

解决办法:降低 PHP 版本,或把所有的 ereg_replace() 和对应的匹配表达式都换成 preg_replace() 标准。

版权声明:本文为博主原创文章,未经博主允许不得转载。http://www.dedenotes.com/course/dede-tags.html
(1)
打赏 微信扫一扫 微信 支付宝 QQ 扫码打赏

DedeCms织梦SQL万能标签调用数据库任意字段

Dedenotes 赞(3)

DedeCms模板机制提供了常用的网站数据调用标签,可以满足大部分网站的调用需求,可对于有更大需求,需要再灵活调用网站内容的织梦用户来说显然不够,因此织梦很人性化地提供了SQL万用标签{dede:sql}{/dede:sql},通过该标签,织梦用户可以插入SQL语言查询数据库并调用数据库内容。

织梦修改本地上传及下载远程图片的存储路径

Dedenotes 赞(3)

织梦文章图片路径在 uploads/allimg 下,每天都会生成一个文件夹怎么办?打开织梦后台,系统>系统基本参数>附件设置,有一个设置项“附件保存形式(按 data 函数日期参数)”,默认的值是:ymd,也就是年月日的意思,把它改成 ym 就是按年月保存,同理改成 y 则按年保存附件。

织梦搜索页实现全文检索和标题的方法

Dedenotes 赞(3)

织梦搜索页默认只能搜索标题(title)、关键字(keywords)、作者(writer),无法搜索到文章内容(body),本文讲解下如何使用织梦普通搜索和高级搜索,让搜索页实现全文检索。