CI 使用ckeditor,ckfinder的替代品

ckeditor 免費使用的沒錯

但是如果要上傳圖片的話就需要另外掛載ckfinder來使用

然而ckfinder需要付費才能使用全部的功能

例如把上傳的圖片刪除就需要付費才有辦法使用

而且要根據使用者來自定義資料夾的話ckfinder實現起來頗複雜(在網路上找了很久都看不懂)

後來找到了這一款 "Filemanager"

https://github.com/simogeo/Filemanager

這一款不輸ckfinder,重點是免費使用

把這兩個ckeditor 和 Filemanager 下載下來後放到想放的assets裡

再來就參考這一篇

https://github.com/moemoe89/codeigniter-ckeditor-filemanager


STEP1

去找 CI的 index.php 檔案


$application_folder = 'application';
改成
$application_folder = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'application';


$system_path = 'system';
改成
$system_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'system';

STEP2

找到filemanager資料夾裡面的scripts裡的 filemanager.config.js.default 這個檔案

複製一份把檔名的.default去掉



STEP3

再來到filemanager -> connnectors -> php

找到這個檔案  default.config.php

在裡面任意處加上

ob_start();
include('../../../../index.php');
ob_end_clean();
$CI =& get_instance();
$CI->load->driver('session');
if(@$_SESSION['upload_image_file_manager'] == TRUE){
 $codeigniterAuth = true;
} else {
 $codeigniterAuth = false;
}
並且把 function auth 修改成

function auth() {
  // You can insert your own code over here to check if the user is authorized.
  // If you use a session variable, you've got to start the session first (session_start())
  return $GLOBALS['codeigniterAuth'];
}

這個就是用來判斷是否可以使用檔案上傳這個功能的方法,

因此你需要在使用者登入的時候給他一個session "upload_image_file_manager=true"

如果不想給他使用就把他設成false,這樣使用者就不能使用檔案上傳的功能了


STEP4

接著到需要使用編輯器的頁面載入js

<script src="<?php echo base_url('assets/ckeditor/ckeditor.js'); ?>"></script>
然後修改ckeditor的呼叫方法

 CKEDITOR.replace('editor1' ,{
  filebrowserImageBrowseUrl : '<?php echo base_url('assets/filemanager/index.html');?>'
 });

這樣就可以使用了~


--------------------------------------------------------------------------------------------------------------------------

再來就是最重要的如何給使用者定義不同的根目錄(不然這樣可以看到其他使用者上傳的檔案)

https://github.com/simogeo/Filemanager/wiki/How-to-allow-users-to-have-their-own-folder


來到第三步驟提到的檔案 default.config.php

session_start();

$folderPath = '/assets/userfiles/' . $_SESSION['userfoldername'].'/';
$fm = new Filemanager();
$fm->setFileRoot($folderPath);

第一行是把session 打開

第二行就是你想要的讓他檔案上傳到哪裡,後面的session可以是使用這帳號,反正就是每個使用者不會重複的一個值

第三行執行filemanager

第四行設定路徑

再來去 scripts/filemanager.config.json 這個檔案

找到fileRoot把他設定成 "/"

並且它上面那個serverRoot=true

這樣大致就OK了



留言

這個網誌中的熱門文章

jquery取得 input array 陣列