科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件fck的中级使用

fck的中级使用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

fck的中级使用

作者:叁石 来源:CSDN 2008年3月28日

关键字: 使用 Web开发 软件

  • 评论
  • 分享微博
  • 分享邮件

今天突然想看看cms的东西,我到处找了找,发现了三个一个是dedecms,一个是phpcms(加密了),还有一个是verycms。
在弄dedecms的时候发现它使用的编辑器是fck,我原来也用过,但是没有他修改的那么好,修改了很多的东西,我也想
修改一个自己使用的,但是我使用的时候发现没有那么简单,现在的版本跟那个时候差的比较远,我到现在也没有找到
toolbar这些图片放到那里了,感觉是一张大图做的热点,而原来是是图片,而且也没找到具体的对应关系。
但是弄了就不能白弄,顺便修改了一个能使用的fck出来,当然是针对php的,关于fck的初级使用我就不说了,如果不会的你
可以去 blog.csdn.net/sanshi0815 上面去找 那里面有简单的一个使用。这个称之为中级使用,我一定是做修改的。
使用fck的好处就是,使用他的上传功能,fck的上传功能分三种,一种是文件,一种是图片,一种的flash,
如果使用默认的配置文件的话,一定会出现问题。他上传的文件全放在一个目录下,这个目录在你使用以上三种浏览的时候都看不到,
所以要设置下,修改 FCKeditor\editor\filemanager\upload\php\下 的文件,还有一个问题就是,他默认是你上传什么样的文件名字
最后给你存在服务器为什么名字。这样使用我感觉有写地方不太适用,我做了简单的修改
在config.php修改成了如下的样子

<?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 同样进行了修改,动的比较乱,同时做一些东西做了简单的中文翻译

<?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'.') + ) ) ;
$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') ) )
    
SendResults1'''''上传类别错误!' ) ;

// 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) > && !in_array$sExtension$arAllowed ) ) || ( count($arDenied) > && 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 ;

// The the target directory.
if ( isset( $Config['UserFilesAbsolutePath'] ) && strlen$Config['UserFilesAbsolutePath'] ) > )
    
$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$sFilePath0777 ) ;
            
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/' ; 要做基本的对应
这个目录看名字增加了很多新的功能,不过,没具体看

另外一个问题就是,如果用户上传了什么东西,我们要做个记录这个怎么办?
没有什么好的办法,在用户提交以后做判断,如果是附件上传那您需要自己分析下,如果是图片的
我写了一个,不过我正则不好,也就是笔画下,有什么好的方式,方法麻烦您留言,我也顺便学习下

<?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
把下面的内容注释掉

                                        <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>&nbsp;</td>
                                                                <td nowrap>Create New Folder</td>
                                                        </tr>
                                                </table>
                                        </button>
还有
frmupload.html 这个文件

<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地址,我给大家发,或者你直接给我发邮件,我给你回复过去.

作者:叁石
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章