今天突然想看看cms的东西,我到处找了找,发现了三个一个是dedecms,一个是phpcms(加密了),还有一个是verycms。
在弄dedecms的时候发现它使用的编辑器是fck,我原来也用过,但是没有他修改的那么好,修改了很多的东西,我也想
修改一个自己使用的,但是我使用的时候发现没有那么简单,现在的版本跟那个时候差的比较远,我到现在也没有找到
toolbar这些图片放到那里了,感觉是一张大图做的热点,而原来是是图片,而且也没找到具体的对应关系。
但是弄了就不能白弄,顺便修改了一个能使用的fck出来,当然是针对php的,关于fck的初级使用我就不说了,如果不会的你
可以去 blog.csdn.net/sanshi0815 上面去找 那里面有简单的一个使用。这个称之为中级使用,我一定是做修改的。
使用fck的好处就是,使用他的上传功能,fck的上传功能分三种,一种是文件,一种是图片,一种的flash,
如果使用默认的配置文件的话,一定会出现问题。他上传的文件全放在一个目录下,这个目录在你使用以上三种浏览的时候都看不到,
所以要设置下,修改 FCKeditor\editor\filemanager\upload\php\下 的文件,还有一个问题就是,他默认是你上传什么样的文件名字
最后给你存在服务器为什么名字。这样使用我感觉有写地方不太适用,我做了简单的修改
在config.php修改成了如下的样子
CODE:
<?php
global $Config ;
$Config['Enabled'] = "uploader" ;
$Config['UserFilesPath'] = '/UserFiles/' ;
$Config['UserFilesAbsolutePath'] = '' ;
$Config['ForceSingleExtension'] = true ;
$Config['AllowedExtensions']['File'] = array('rar','doc') ;
$Config['DeniedExtensions']['File'] = array() ;
$Config['AllowedExtensions']['Image'] = array('jpg','gif','jpeg','png') ;
$Config['DeniedExtensions']['Image'] = array() ;
$Config['AllowedExtensions']['Flash'] = array('swf','fla') ;
$Config['DeniedExtensions']['Flash'] = array() ;
//sanshi add. set save file name ,donot the file type
//如果使用上传的文件名的话,设置 $saveFileName=false
$saveFileName = date("Y,m,d,H,i,s");
?>
而upload.php 同样进行了修改,动的比较乱,同时做一些东西做了简单的中文翻译
CODE:
<?php
require('config.php') ;
require('util.php') ;
// This is the function that sends the results of the uploading process.
function SendResults( $errorNumber, $fileUrl = '', $fileName = '', $customMsg = '' )
{
echo '<script type="text/javascript">' ;
echo 'window.parent.OnUploadCompleted(' . $errorNumber . ',"' . str_replace( '"', '\"', $fileUrl ) . '","' . str_replace( '"', '\"', $fileName ) . '", "' . str_replace( '"', '\"', $customMsg ) . '") ;' ;
echo '</script>' ;
exit ;
}
// Check if this uploader has been enabled.
if ( !$Config['Enabled'] )
SendResults( '1', '', '', '这个文件上传失败请检查 "editor/filemanager/upload/php/config.php" 文件' ) ;
// Check if the file has been correctly uploaded.
if ( !isset( $_FILES['NewFile'] ) || is_null( $_FILES['NewFile']['tmp_name'] ) || $_FILES['NewFile']['name'] == '' )
SendResults( '202' ) ;
// Get the posted file.
$oFile = $_FILES['NewFile'] ;
// Get the uploaded file name extension.
$sFileName = $oFile['name'] ;
// Replace dots in the name with underscores (only one dot can be there... security issue).
if ( $Config['ForceSingleExtension'] )
$sFileName = preg_replace( '/\.(?![^.]*$)/', '_', $sFileName ) ;
$sOriginalFileName = $sFileName ;
// Get the extension.
$sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ;
$sExtension = strtolower( $sExtension ) ;
// The the file type (from the QueryString, by default 'File').
$sType = isset( $_GET['Type'] ) ? $_GET['Type'] : 'File' ;
// Check if it is an allowed type.
if ( !in_array( $sType, array('File','Image','Flash','Media') ) )
SendResults( 1, '', '', '上传类别错误!' ) ;
// Get the allowed and denied extensions arrays.
$arAllowed = $Config['AllowedExtensions'][$sType] ;
$arDenied = $Config['DeniedExtensions'][$sType] ;
// Check if it is an allowed extension.
if ( ( count($arAllowed) > 0 && !in_array( $sExtension, $arAllowed ) ) || ( count($arDenied) > 0 && in_array( $sExtension, $arDenied ) ) )
SendResults( '202' ) ;
$sErrorNumber = '0' ;
$sFileUrl = '' ;
// Initializes the counter used to rename the file, if another one with the same name already exists.
$iCounter = 0 ;
// The the target directory.
if ( isset( $Config['UserFilesAbsolutePath'] ) && strlen( $Config['UserFilesAbsolutePath'] ) > 0 )
$sServerDir = $Config['UserFilesAbsolutePath'] ;
else
$sServerDir = GetRootPath() . $Config["UserFilesPath"]."{$sType}/";
while ( true )
{
// Compose the file path.
//$sExtension 这个变量是文件后缀
// $saveFileName 为设置的保存文件名
//$sFilePath = $sServerDir . $sFileName ; //old
//sanshi add
if( $saveFileName!=false )
$sFileName = $saveFileName.".".$sExtension;
else
$sFilePath = $sServerDir . $sFileName ;
$sFilePath = $sServerDir . $sFileName ;
// If a file with that name already exists.
if ( is_file( $sFilePath ) )
{
$iCounter++ ;
$sFileName = RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ;
$sErrorNumber = '201' ;
}
else
{
//SendResults( '1', '', '', $sFilePath) ;exit();
if( function_exists("move_uploaded_file") )
move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ;
else
copy($oFile['tmp_name'], $sFilePath);
if ( is_file( $sFilePath ) )
{
$oldumask = umask(0) ;
chmod( $sFilePath, 0777 ) ;
umask( $oldumask ) ;
}
$sFileUrl = $Config["UserFilesPath"]."{$sType}/" . $sFileName ;
break ;
}
}
SendResults( $sErrorNumber, $sFileUrl, $sFileName ) ;
?>
php的文件基本处理完成了,然后看其他的文件
对fck的配制文件的修改是必然的了,就不在展示了
同时,我对几个错误处理文件也做了中文的错误提示的修改
路径是
FCKeditor\editor\dialog\的 fck_image ,fck_flash,fck_link 目录下的错误提示做的修改
然后就是对上面路径下的js文件大家有个思想准备,他们提供了错误号
0 成功
1 自己定义
101 自己定义
202 类型错误
203 权限错误
大家注意使用fck的时候会做一些权限的处理,这个时候可以使用js在这几个js的文件里做判断了
这几个文件是在提交的时候用的上,如果加权限判断的话,请加在 CheckUpload()这个函数里。
关于如何找到tool与文件的对应关系我使劲的找也没有结果,
不过大家可以看到 FCKeditor\editor\dialog\ 这个目录下有很多的对应文件,大家可以想办法做些处理来完善下。
说另外一个问题,多用户使用
fck可以完成多用使用,原来是不同的用户把图片放到不同的目录下,浏览的时候根据不同的用户去看不同的目录就可以了,
把管理员的目录放到最上面,也就是说其他人员的图片目录在管理员的目录下面,就可以了。
关于上传还是设置 config.php这个文件的 $Config['UserFilesPath'] 路径 加个什么其他的您自己看着办
浏览目录的设置在 FCKeditor\editor\filemanager\browser\default\connectors\php\config.php
文件
修改
$Config['UserFilesPath'] = '/UserFiles/' ; 要做基本的对应
这个目录看名字增加了很多新的功能,不过,没具体看
另外一个问题就是,如果用户上传了什么东西,我们要做个记录这个怎么办?
没有什么好的办法,在用户提交以后做判断,如果是附件上传那您需要自己分析下,如果是图片的
我写了一个,不过我正则不好,也就是笔画下,有什么好的方式,方法麻烦您留言,我也顺便学习下
CODE:
<?php
$str='<p><img height="100" width="100" alt="" src="/UserFiles/Image/2006,08,24,12,10,36.jpg" /><img height="100" width="100" alt="" src="/UserFiles/Image/2006,08,24,12,10,36.jpg" /></p>';
$format='/<img.*?/>/i';
$temp=array();
preg_match_all($format,$str,$out);
foreach ((array)$out[0] As $k)
{
$format2 = '/src=["](.*)["]/';
$len=preg_match_all($format2,$k,$outTemp);
$temp[]=$outTemp[$len];
}
print_r($temp);
?>
还有个问题,就是css的问题,如果用户在选择字体的时候一直使用默认的,当用户发表以后有可能会发现,
编辑时候的字体与发表后的字体有区别,我当初使用的时候就遇到了,但是没想出来好的解决办法,现在告诉您,去修改一个文件
文件位置在
FCKeditor\editor\css\fck_editorarea.css 这个文件,起作用的是
body, td
{
font-family: Arial, Verdana, Sans-Serif;
font-size: 12px;
}
这里的内容把字体的大小设置成,跟您发布的默认大小一样就不会出现上面说的问题了。
最后一个问题就是,当我要浏览服务器上的图片,flash,还有文件的时候,会出现一个提示,你可以建立新的文件夹
并可以选择文件夹上传东西,这个功能如果你想关闭的话
请到
FCKeditor\editor\filemanager\browser\default 目录下
修改
frmcreatefolder.html
把下面的内容注释掉
CODE:
<button type="button" style="WIDTH: 100%" onclick="CreateFolder();">
<table cellSpacing="0" cellPadding="0" border="0">
<tr>
<td><img height="16" alt="" src="images/Folder.gif" width="16"></td>
<td> </td>
<td nowrap>Create New Folder</td>
</tr>
</table>
</button>
还有
frmupload.html 这个文件
CODE:
<input id="NewFile" name="NewFile" style="WIDTH: 100%" type="file">
还有
<input id="btnUpload" type="submit" value="Upload">
也同时注释掉
如果使用他们建立与上传
使用的文件是
FCKeditor\editor\filemanager\browser\default\connectors\php 下面的
commands.php 这个文件
这个上传与我们刚才修改过的那个上传是不一样,如果您想使用一个的话,请重新修改
到此fck的使用我也就说这么多了!会的也就这么多了。希望大家指教下,由于附件太少,我精简完是350k,所有没有办法给大家我的代码了,如果需要留下mail地址,我给大家发,或者你直接给我发邮件,我给你回复过去.
作者:叁石
mail:sanshi0815@tom.com