疯人院里的快乐时光

疯,不为常规所度测……

PHPcms与百度编辑器UEditor深度结合

记忆力是严重衰退了,关于百度编辑器还有个地方没提,那就是把PHP文件夹里的config.json文件得拷贝出来。我是放在了根目录下,然后为了系统好管理,需要打开这个文件修改编辑器上传后的目录。

“imagePathFormat”:"/ueditor/php/upload/..."

改成了:

“imagePathFormat”:"upload/image/..."

关于这里还有个小细节,就是分三种文件夹需要改三个地方,分别为图片image、视频video、文件file,注意分开别漏了就好。剩下的就是系统的存储目录修改了,打开/phpcms/libs/classes/attachment.class.php文件,在47行左右做如下改动:

$this->savepath = $this->upload_root.$this->upload_dir.date('Y/m/d');
$this->savepath = 'uploadfile/image/'.$this->upload_dir.date('Y/m/d');

把109行注释掉,第118行做如下改动:

$uploadedfile = array('filename'=>$file['name'],'filepath‘=>$filepath,....
$uploadedfile = array('filename'=>$file['name'],'filepath‘=>$savefile,....

这个文件最后把区分用户上传和管理员上传的字段补上,在add方法里,208行和220行之间随便哪个地方加上一句:

$uploadedfile['isuser'] = $_SESSION['roleid'] ? 0 : 1;

在这里我是用1表示为是注册用户0表示为管理员,做完这些就用phpMyAdmin或者Navicat之类的工具,在数据库附件表里手工加上这个字段。

再接着就是改系统的表单类了,文件是在/phpcms/libs/classes/form.class.php,改的代码很多,直接替换editor方法,代码如下:

public static function editor($textareaid = 'content',$module = '', $catid = '', $allowbrowser = 1,$alowuploadexts = '',$disabled_page = 0, $allowuploadnum = '10',$setting) {
		$editor = $setting['editor'] ? $setting['editor'] : 'ueditor' ;
		$str ='';
		if($editor == 'ueditor'){
			if(!defined('EDITOR_INIT')) {
			$str = '<script type="text/javascript" src="'.JS_PATH.'ueditor.full.1.4.3.2/ueditor.config.js"></script>';
			$str .= '<script type="text/javascript" src="'.JS_PATH.'ueditor.full.1.4.3.2/ueditor.all.min.js"></script>';
			define('EDITOR_INIT', 1);
			}
			if($setting['toolbar'] == 'basic') {
				$admin = defined('IN_ADMIN') ? "'Source'," : '';
				$toolbar = ",toolbars:[[".$admin."'FullScreen', 'Undo', 'Redo','Bold','italic','underline','strikethrough','superscript','subscript','formatmatch','removeformat','justifyleft','justifyright','justifycenter','justifyjustify','pasteplain','date','selectall','forecolor','insertorderedlist','insertunorderedlist','fontsize']]";
			} elseif($setting['toolbar'] == 'full') {
				if(defined('IN_ADMIN')) {
					$admin = "'Source',";
				} else {
					$admin = '';
				}
				$toolbar = ", toolbars: [[
				'fullscreen', ".$admin." '|', 'undo', 'redo', '|',
				'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|',
				'rowspacingtop', 'rowspacingbottom', 'lineheight', '|',
				'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|',
				'directionalityltr', 'directionalityrtl', 'indent', '|',
				'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|',
				'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|',
				'simpleupload', 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|',
				'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|',
				'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|',
				'print', 'preview', 'searchreplace', 'help', 'drafts'
			]]";
			}
			$str .= "<script type=\"text/javascript\">\r\n";
			$str .= "UE.getEditor('$textareaid',{";
			$str .= "serverUrl: '".APP_PATH."index.php?m=attachment&c=ueditupload&a=upload'";
			if($setting['height']) $str .= ',initialFrameHeight:'.$setting['height'];
			$str .= $toolbar;
			$str .= '})';
			$str .= '</script>';
		}else if($editor == 'ckeditor'){
			if(!defined('EDITOR_INIT')) {
				$str = '<script type="text/javascript" src="'.JS_PATH.'ckeditor4.5.9/ckeditor.js"></script>';
				define('EDITOR_INIT', 1);
			}
			if($setting['toolbar'] == 'basic') {
				$toolbar = defined('IN_ADMIN') ? "['Source']," : '';
				$toolbar .= "['Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ],['Maximize'],\r\n";
			} elseif($setting['toolbar'] == 'full') {
				if(defined('IN_ADMIN')) {
					$toolbar = "['Source',";
				} else {
					$toolbar = '[';
				}
				$toolbar .= "'-','Templates'],
				['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print'],
				['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],['ShowBlocks'],['Image','Capture','Flash','flashplayer','MyVideo'],['Maximize'],
				'/',
				['Bold','Italic','Underline','Strike','-'],
				['Subscript','Superscript','-'],
				['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
				['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
				['Link','Unlink','Anchor'],
				['Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
				'/',
				['Styles','Format','Font','FontSize'],
				['TextColor','BGColor'],
				['attachment'],\r\n";
			} elseif($setting['toolbar'] == 'desc') {
				$toolbar = "['Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink', '-', 'Image', '-','Source'],['Maximize'],\r\n";
			} else {
				$toolbar = '';
			}
			$str .= "<script type=\"text/javascript\">\r\n";
			$str .= "CKEDITOR.replace( '$textareaid',{";
			$str .= "height:{$setting['height']},";
		
			$show_page = ($module == 'content' && !$disabled_page) ? 'true' : 'false';
			$str .="pages:$show_page,subtitle:$show_page,textareaid:'".$textareaid."',module:'".$module."',catid:'".$catid."',\r\n";
			if($setting['allowupload']) {
				$authkey = upload_key("$allowuploadnum,$alowuploadexts,$allowbrowser");
				$str .="flashupload:true,alowuploadexts:'".$alowuploadexts."',allowbrowser:'".$allowbrowser."',allowuploadnum:'".$allowuploadnum."',authkey:'".$authkey."',\r\n";
			}
			if($setting['allowupload']) $str .= "filebrowserUploadUrl : 'index.php?m=attachment&c=attachments&a=upload&module=".$module."&catid=".$catid."&dosubmit=1',\r\n";
			if($color) {
				$str .= "extraPlugins : 'uicolor',uiColor: '$color',";
			}
			$str .= "toolbar :\r\n";
			$str .= "[\r\n";
			$str .= $toolbar;
			$str .= "]\r\n";
			$str .= "});\r\n";
			$str .= '</script>';
			$ext_str = "<div class='editor_bottom'>";
			if(!defined('IMAGES_INIT')) {
				$ext_str .= '<script type="text/javascript" src="'.JS_PATH.'swfupload/swf2ckeditor.js"></script>';
				define('IMAGES_INIT', 1);
			}
			$ext_str .= "<div id='page_title_div'>
			<table cellpadding='0' cellspacing='1' border='0'><tr><td class='title'>".L('subtitle')."<span id='msg_page_title_value'></span></td><td>
			<a class='close' href='javascript:;' onclick='javascript:$(\"#page_title_div\").hide();'><span>×</span></a></td>
			<tr><td colspan='2'><input name='page_title_value' id='page_title_value' class='input-text' value='' size='30'>&nbsp;<input type='button' class='button' value='".L('submit')."' onclick=insert_page_title(\"$textareaid\",1)></td></tr>
			</table></div>";
			$ext_str .= "</div>";
			if(is_ie()) $ext_str .= "<div style='display:none'><OBJECT id='PC_Capture' classid='clsid:021E8C6F-52D4-42F2-9B36-BCFBAD3A0DE4'><PARAM NAME='_Version' VALUE='0'><PARAM NAME='_ExtentX' VALUE='0'><PARAM NAME='_ExtentY' VALUE='0'><PARAM NAME='_StockProps' VALUE='0'></OBJECT></div>";
			$str .= $ext_str;
		}
		
		
		return $str;
	}

最后一步了,在模型管理里字段编辑时添加上编辑器选择项,文件在/phpcms/modules/content/fields/editor/目录下面,一共有field_add_form.inc.php、field_edit_form.inc.php、form.inc.php三个文件,头两个文件在第二行加入:

<tr> 
      <td width="100">编辑器选择:</td>
      <td><input type="radio" name="setting[editor]" value="ueditor" checked> 百度编辑器 <input type="radio" name="setting[editor]" value="ckeditor"> CK编辑器 </td>
</tr>

第三个文件在第6行后加入:

$setting = string2array($setting);

把倒数第二行的return内容改成如下:

return "<div id='{$field}_tip'></div>".'<textarea name="info['.$field.']" id="'.$field.'" boxid="'.$field.'">'.$value.'</textarea>'.form::editor($field,'content',$this->catid,1,'',$disabled_page,$allowuploadnum,$setting);

好了,至此大功告成,百度编辑器就算完美的和PHPcms结合了,整个过程步骤很多,需要细心调整,这样的结果是还可以往里面添加各类的编辑器,在管理员后台随时的更换。回顾整个过程最麻烦的主要在修改上传设置方面,为了和系统统一改了太多东西,如果不需要这功能的情况下,那就只要改form表单类和content目录下的字段设置文件这两地方就可以实现自由切换编辑器了。

点赞

发表评论

邮箱地址不会被公开。 必填项已用*标注