简体   繁体   English

CKEditor/CKFinder 与 CakePHP 2.0

[英]CKEditor/ CKFinder with CakePHP 2.0

I'm trying to add image and file upload to my CKEditor instance (within a CakePHP app).我正在尝试将图像和文件上传添加到我的 CKEditor 实例(在 CakePHP 应用程序中)。 CKEditor has been working fine, but I can't get the CKFinder part to work. CKEditor 一直工作正常,但我无法让 CKFinder 部分工作。 I can get the 'Browse Server' button to appear, but when I click it, I get a window with the message:我可以让“浏览服务器”按钮出现,但是当我点击它时,我会看到一个带有消息的窗口:

The requested URL /ckfinder/ckfinder.html was not found on this server.在此服务器上找不到请求的 URL /ckfinder/ckfinder.html。

I've tried various combinations of paths, but I'm obviously just not hitting the right one!我尝试了各种路径组合,但显然我没有找到正确的组合!

Here's what I have so far:这是我到目前为止所拥有的:

File structure:文件结构:

 In /app/webroot/js I have ckeditor and ckfinder
 In /app/webroot/ I have files, which is what I'd like to upload to (ideally files/Images and files/PDF, but that doesn't matter so much)

I've changed the paths in ckfinder/config.php as follows:我已经更改了 ckfinder/config.php 中的路径,如下所示:

$baseUrl = '/files/';
$baseDir = '/www/MCS/app/webroot/files/'; (/www/MCS is the path to the app)

In my view file, I have the following:在我的视图文件中,我有以下内容:

<script type="text/javascript">
    var instance = CKEDITOR.instances['PageContent'];
    if(instance)
    {
        CKEDITOR.remove(instance);
    }
    var editor =
    CKEDITOR.replace( 'PageContent', {
        toolbar: 'Page',
        width: '737',
        height: '280',
        filebrowserBrowseUrl : 'ckfinder/ckfinder.html',
        filebrowserImageBrowseUrl : '/ckfinder/ckfinder.html?Type=Images',
        filebrowserFlashBrowseUrl : '/ckfinder/ckfinder.html?Type=Flash',
        filebrowserUploadUrl : '/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files',
        filebrowserImageUploadUrl : '/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images',
        filebrowserFlashUploadUrl : '/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash'
    });
</script>

I've tried changing the paths in the code above, adding various parts of the full URL, but nothing has helped.我尝试更改上面代码中的路径,添加完整 URL 的各个部分,但没有任何帮助。

I'm using the latest versions of CKEditor and CKFinder, and CakePHP 2.0.我正在使用最新版本的 CKEditor 和 CKFinder,以及 CakePHP 2.0。

For anyone else who comes up against this, here's what I did to fix it:对于遇到此问题的其他人,这是我为解决此问题所做的工作:

Downloaded ckfinder into /app/webroot/js/ckfinder将 ckfinder 下载到 /app/webroot/js/ckfinder

In /app/webroot/js/ckfinder/config.php, I have在/app/webroot/js/ckfinder/config.php,我有

$baseUrl = 'http://localhost/mysite/app/webroot/js/ckfinder/userfiles/';

and I changed the authenticate function (thanks to Natdrip, above) to我将身份验证功能(感谢上面的 Natdrip)更改为

function CheckAuthentication()
{
    session_name("CAKEPHP");
    session_start();
    if( isset($_SESSION['Auth']['User']) ) { return true; }
    return false;
}

I set it up in the view using:我使用以下方法在视图中设置它:

var editor =
CKEDITOR.replace( 'PageContent', {
    toolbar: 'Page',
    width: '700',
    height: '280',
    filebrowserBrowseUrl : '/mysite/app/webroot/js/ckfinder/ckfinder.html',
    filebrowserImageBrowseUrl : '/mysite/app/webroot/js/ckfinder/ckfinder.html?type=Images',
    filebrowserFlashBrowseUrl : '/mysite/app/webroot/js/ckfinder/ckfinder.html?type=Flash',
    filebrowserUploadUrl : '/mysite/app/webroot/js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files',
    filebrowserImageUploadUrl : '/mysite/app/webroot/js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images',
    filebrowserFlashUploadUrl : '/mysite/app/webroot/js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash'
});

Once I had done this, I could see the 'Browse Server' button when I clicked 'Add Image' in CKeditor, but it was giving the usual 'Cakephp can't find the controller error'.完成此操作后,当我在 CKeditor 中单击“添加图像”时,我可以看到“浏览服务器”按钮,但它给出了通常的“Cakephp 找不到控制器错误”。

So, I edited my htaccess files so that anything being directed to ckfinder would not look for a controller.所以,我编辑了我的 htaccess 文件,以便任何被定向到 ckfinder 的东西都不会寻找控制器。 To do this I added:为此,我添加了:

   RewriteRule   ^ckfinder/ - [L]

after RewriteEngine on in all 3 files在所有 3 个文件中RewriteEngine on

and after that, it worked!在那之后,它起作用了!

I don't know if this is the best way to do it, but maybe it will help someone else a little bit!我不知道这是否是最好的方法,但也许它会对其他人有所帮助!

I have the ckeditor located @ webroot/js/ I downloaded and installed http://labs.corefive.com/Projects/FileManager/ and have it located @ webroot/js/ckeditor/filemanager我的 ckeditor 位于 @ webroot/js/我下载并安装了http://labs.corefive.com/Projects/FileManager/并将其位于 @ webroot/js/ckeditor/filemanager

for the ckeditor/config.js I added the following code:对于ckeditor/config.js我添加了以下代码:

CKEDITOR.editorConfig = function( config )
{
// Define changes to default configuration here. For example:
    config.uiColor = '#AADC6E';
    config.width = '100%';
    config.filebrowserBrowseUrl = '/js/ckeditor/filemanager/index.html';
    config.filebrowserImageBrowseUrl = '/js/ckeditor/filemanager/index.html?type=Images';
    config.filebrowserFlashBrowseUrl = '/js/ckeditor/filemanager/index.html?type=Flash';
    config.filebrowserUploadUrl = '/js/ckeditor/filemanager/connectors/php/filemanager.php';
    config.filebrowserImageUploadUrl = '/js/ckeditor/filemanager/connectors/php/filemanager.php?command=QuickUpload&type;=Images';
    config.filebrowserFlashUploadUrl = '/js/ckeditor/filemanager/connectors/php/filemanager.php?command=QuickUpload&type;=Flash';

}; };

I created the folders /app/webroot/assets/img/我创建了文件夹/app/webroot/assets/img/
in the filemanager.config.js I switched在我切换的filemanager.config.js

var fileRoot = '/app/webroot/assets/img/';

in the /app/webroot/js/ckeditor/filemanager/connectors/php/filemanager.config.php I added to the auth()/app/webroot/js/ckeditor/filemanager/connectors/php/filemanager.config.php我添加到auth()

session_name("CAKEPHP");
session_start();
if( isset($_SESSION['Auth']['User']) )
 {
    return true;
    }
return false;   

in the view add/edit I added the following:在视图添加/编辑中,我添加了以下内容:

echo $this->Form->textarea('Content',array('class'=>'ckeditor'));

and it works!它有效! here is the web site I used for ref http://www.hashtwo.com/blog/integrating-a-file-browser-into-ckeditor-cakephp这是我用于参考的网站 http://www.hashtwo.com/blog/integrating-a-file-browser-into-ckeditor-cakephp

You mentioned you have ckfinder in /js, so I would prepend all the paths with /js .你提到你在 /js 中有 ckfinder,所以我会在所有路径前面加上/js

filebrowserBrowseUrl : '/js/ckfinder/ckfinder.html',
filebrowserImageBrowseUrl : '/js/ckfinder/ckfinder.html?Type=Images',
filebrowserFlashBrowseUrl : '/js/ckfinder/ckfinder.html?Type=Flash',
filebrowserUploadUrl : '/js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files',
filebrowserImageUploadUrl : '/js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images',
filebrowserFlashUploadUrl : '/js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash'

I worked around for a long time.我工作了很长时间。 My solution with cakephp 2.3 is at the end put into the webroot/js/ckfinder the version 2.3.1 of ckfinder then In a custom helper I put following code as getFck function我的 cakephp 2.3 解决方案最后放入 webroot/js/ckfinder 2.3.1 版的 ckfinder 然后在自定义助手中,我将以下代码作为 getFck 函数

    function _getFck( $pToReplaceId, $pHtmlContent=null, $pLabel=null ){
    $result = "";

    if ( $pLabel != null ){
        $result .= "<div class=\"input text\">\n";
        $result .= "<label for=\"$pToReplaceId\">".__($pLabel)."</label>\n";
        $result .= "</div>\n";
    }
    App::uses('FormHelper', 'View/Helper');
    $fh = new FormHelper(new View());   
    $result .= $fh->input('comment', array(
        'id' => $pToReplaceId,
        'name' => $pToReplaceId,
        'type' => 'textarea',
        'value' => $pHtmlContent,
        ));
    $result .= "<script>var ckEditor = CKEDITOR.replace( '$pToReplaceId', {
        removeButtons: '',
        toolbar: 'Page',
        skin: 'moono',
        lang: 'fr',
        filebrowserBrowseUrl: '/js/ckfinder/ckfinder.html',
        filebrowserImageBrowseUrl: '/js/ckfinder/ckfinder.html?Type=Images',
        filebrowserFlashBrowseUrl: '/js/ckfinder/ckfinder.html?Type=Flash',
        filebrowserUploadUrl: '/js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files',
        filebrowserImageUploadUrl: '/js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images',
        filebrowserFlashUploadUrl: '/js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash'
} );</script>";

    echo $result;
}

and for configuration in the /js/ckfinder/Config.php file the following methods and settings:并在 /js/ckfinder/Config.php 文件中配置以下方法和设置:

$baseUrl = "http://".$_SERVER['HTTP_HOST']."/files/ckFinderFiles/";//working on prod
$baseDir = $_SERVER['DOCUMENT_ROOT'].'/app/webroot/files/ckFinderFiles/';//working on prod

Dont forget to modify the CheckAuthentication method as described above...不要忘记修改上面描述的 CheckAuthentication 方法......

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM