织梦dede文本编辑器换成ueditor后管理员留言回复不成功问题

2018年3月23日15:45:45 2 1,043 views

自从昨天把dede的文本编辑器换成了ueditor后,发现管理员不能回复留言。

在留言文本框内内容也是写了的,点击提交的时候,它也是提示回复成功,但是前台就是不显示留言的回复。我这里把游客回复权限是关了的,所以这个BUG不管是用户还是管理员应该都是存在的。

小插曲:

在解决这个BUG中,发现dede代码写的太不严谨,我们来看看代码。

织梦dede文本编辑器换成ueditor后管理员留言回复不成功问题

最开始我都在纠结,系统提示成功,但在数据库里就是看到不数据,看了这条代码才明白了,所以我果断把这代码改了。至于怎么改,看国人了。


正文:

打开管理员留言回复页面templets/plus/guestbook-admin.htm的代码,可以看到一条PHP调用代码:

<?php GetEditor("remsg", "<font color=red>管理员回复:</font>", 250, "MemberLit"); ?>

织梦dede文本编辑器换成ueditor后管理员留言回复不成功问题

 

要想知道是留言哪里出了问题了,可以像我图片中注释的地方一样,写个文本域去测试一下,留言能正常回复不。当然,我用了文本域之后我的留言是正常回复的,所以,我就把所以问题放在了editor编辑器了。

打开文件路径include/helpers/util.helper.php

可以看到获取编辑器的函数

 

织梦dede文本编辑器换成ueditor后管理员留言回复不成功问题

里面的这句话让我发现了天机

if(!function_exists('SpGetEditor'))
        {
            require_once(DEDEINC."/inc/inc_fun_funAdmin.php");
        }
        return SpGetEditor($fname, $fvalue, $nheight, $etype, $gtype, $isfullpage, $bbcode);

从代码中就很容就理解,调用了include/inc/inc_fun_funAdmin.php中的SpGetEditor()方法。

而且此文件也是我之前添加ueditor的文件,所以问题就在这里了。

所以我们打开此文件一探究竟。

在此文件中我分析不出来ueditor文本编辑器哪里有问题,所以索性就直接另写了一个用dede默认文本编辑器的方法。

/* 重写一个给留言用 */

function SpGetEditor2($fname,$fvalue,$nheight="350",$etype="Basic",$gtype="print",$isfullpage="false",$bbcode=false)
{
  
    if($gtype=="")
    {
        $gtype = "print";
    }
    
	
        require_once(DEDEINC.'/ckeditor/ckeditor.php');
        $CKEditor = new CKEditor();
        $CKEditor->basePath = $GLOBALS['cfg_cmspath'].'/include/ckeditor/' ;
        $config = $events = array();
        $config['extraPlugins'] = 'dedepage,multipic,addon';
		if($bbcode)
		{
			$CKEditor->initialized = true;
			$config['extraPlugins'] .= ',bbcode';
			$config['fontSize_sizes'] = '30/30%;50/50%;100/100%;120/120%;150/150%;200/200%;300/300%';
			$config['disableObjectResizing'] = 'true';
			$config['smiley_path'] = $GLOBALS['cfg_cmspath'].'/images/smiley/';
			// 获取表情信息
			require_once(DEDEDATA.'/smiley.data.php');
			$jsscript = array();
			foreach($GLOBALS['cfg_smileys'] as $key=>$val)
			{
				$config['smiley_images'][] = $val[0];
				$config['smiley_descriptions'][] = $val[3];
				$jsscript[] = '"'.$val[3].'":"'.$key.'"';
			}
			$jsscript = implode(',', $jsscript);
			echo jsScript('CKEDITOR.config.ubb_smiley = {'.$jsscript.'}');
		}

        $GLOBALS['tools'] = empty($toolbar[$etype])? $GLOBALS['tools'] : $toolbar[$etype] ;
        $config['toolbar'] = $GLOBALS['tools'];
        $config['height'] = $nheight;
        $config['skin'] = 'kama';
        $CKEditor->returnOutput = TRUE;
        $code = $CKEditor->editor($fname, $fvalue, $config, $events);
        if($gtype=="print")
        {
            echo $code;
        }
        else
        {
            return $code;
        }
    
}

把这段代码放到include/inc/inc_fun_funAdmin.php文件尾部(?>)之前。

然后回到include/helpers/util.helper.php文件的获取编辑的方法处,换成相关的方法名

织梦dede文本编辑器换成ueditor后管理员留言回复不成功问题


 

好了至此留言的问题就解决了,希望这篇文章能帮到你,也许我文中的表述可能不清楚,但你认真看下来应该也能明白的。


以上有失误,请你继续往下看。

用以上的方法更换,我们后台的文本编辑器也是还原了,唯一的做法就是重写一个getEditor。

所以我在include/helpers/uitil.helper.php中重写谢了一个函数方法function GetEditor2()

/**
 *  获取留言编辑器
 *
 * @param     string  $fname  表单名称
 * @param     string  $fvalue 如果表单中有默认值,则填入默认值
 * @param     string  $nheight 高度
 * @param     string  $etype   编辑器类型
 * @param     string  $gtype   获取类型
 * @param     string  $isfullpage   是否全屏
 * @return    string
 */
if ( ! function_exists('GetEditor2'))
{
    function GetEditor2($fname, $fvalue, $nheight="350", $etype="Basic", $gtype="print", $isfullpage="FALSE",$bbcode=false)
    {
        if(!function_exists('SpGetEditor2'))
        {
            require_once(DEDEINC."/inc/inc_fun_funAdmin.php");
        }
        return SpGetEditor2($fname, $fvalue, $nheight, $etype, $gtype, $isfullpage, $bbcode);
    }
}

可以把这段代码放到【获取编辑器】代码之后,把方法GetEditor()中SpGetEditor2改成SpGetEditor

然后在回到templets/plus/guestbook-admin.htm中,我们把回复留言调用的php代码换成我们刚才修改的内容

  <tr bgcolor="#ffffff">
    <td align="center" nowrap>
    	回复留言:<!-- <textarea name="remsg" cols="10" rows="6"></textarea> -->
    </td>
    <td colspan="3" nowrap>
    <div style='width:92%'><?php GetEditor2("remsg", "<font color=red>管理员回复:</font>", 250, "MemberLit"); ?></div>
    </td>
    </tr>

 


现在就大工告成了,然后我刚才也测试了一下,文章,栏目,留言都能正常使用了。

历史上的今天:


欢迎来到菜鸟头头的个人博客
本文章百度已收录,若发现本站有任何侵犯您利益的内容,请及时邮件或留言联系,我会第一时间删除所有相关内容。

  • A+
所属分类:PHP

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  1   博主  1

    • avatar 林东煌 2

      嗯,这样多走动走动就熟悉了。哈。