[精讚] [會員登入]
1271

Yii2 中使用 CKeditor 的檔案上傳功能

在 Yii2 的設計經驗中, 常常會使用 CKediotr 做為 textarea 的編輯器, 但是插圖或檔案上傳需要另

分享此文連結 //n.sfs.tw/12781

分享連結 Yii2 中使用 CKeditor 的檔案上傳功能@杜子的網管筆記
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-25 08:12:17 最後編修
2018-10-04 15:36:45 By 杜子
 

在 Yii2 的設計經驗中,

常常會使用 CKediotr 做為 textarea 的編輯器,

但是插圖或檔案上傳需要另外做設定,而且常會忘記怎麼設定,

乾脆做個筆記好了。

 

原理

在 CKeditor 裡,按下檔案上傳時,應該是利用 ajax 之類的技術在背景返回 server端處理上傳檔案,所以需要告訴 CKeditor 要用哪個 action 處理上傳後的檔案,處理完畢後再把檔案的 URL 位置回傳給 CKeditor。

 

程式碼部份

表單部分的程式 ( _form.php )

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use dosamigos\ckeditor\CKEditor;

/* 製作檔案上傳的 action 的絕對路徑 , 並存在 $url 變數中 */
$url=Yii::$app->urlManager->createAbsoluteUrl(['editor/file-upload']);

?>
<div class="editor-form">
    <?php $form = ActiveForm::begin(); ?>
    <?= $url ?>
    <?= $form->field($model, 'memo')->widget(CKEditor::className(), [
        'options' => ['rows' => 6],
        'preset' => 'full',
        'clientOptions' => [ 'filebrowserUploadUrl' => $url ] //要把這個 aciton 傳給 CKeditor
    ]) ?>
    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>
    <?php ActiveForm::end(); ?>
</div>

 

檔案上傳處理程式 ( EditorController.php )

public function actionFileUpload() {
        //先取得檔案要存放的路徑 , 等一下才能把暫存檔搬過去
        $uploadPath = Yii::getAlias('@webroot').'/uploads/';
        //確認檔案有上傳成功再處理
        if (isset($_FILES["upload"]["name"]) && $_FILES["upload"]["error"] == 0) {
            //檔案上傳,改檔名
            $org_name=explode(".",$_FILES["upload"]["name"]);
            //新檔名
            $upload_filename=time().".".$org_name[count($org_name)-1];
            //把暫存檔案搬到目錄中
            move_uploaded_file($_FILES["upload"]["tmp_name"], $uploadPath . $upload_filename);
            //要回傳給 CKeditor 的檔案 URL 
            $url = Yii::$app->urlManager->createAbsoluteUrl('/uploads/'.$upload_filename);
            //如果有什麼額外的回饋訊息,要打在這裡
            $message="";
            $funcNum = $_GET['CKEditorFuncNum'] ;
            //利用 JavaScript 指令回傳
            echo "<script type='text/javascript'>window.parent.CKEDITOR.tools.callFunction($funcNum, '$url', '$message');</script>";
        } // end if
}

 

 

 

 

END

你可能感興趣的文章

利用 Composer 建立 Yii2 專案 最近由於學校的網路架構調整及更新所有的個人電腦作業系統為 Win 10 , 讓我忙得不可開交, 偏偏 sfs3 此時在台

在 Yii2 使用日期 widget的方法 在 Yii2 裡,讓使用者輸入日期時,可以利用 widget 就可以很方便的達成, f

Adminlte 取消預設 icon 的方法 Adminlte 是個很好用的樣版, 但是選單的 icon 預設只能用 Font Awesome 的圖示, 如果沒有指定

Yii2 中使用 CKeditor 的檔案上傳功能 在 Yii2 的設計經驗中, 常常會使用 CKediotr 做為 textarea 的編輯器, 但是插圖或檔案上傳需要另

Yii2 使用 MODAL class 呈現內容時,如何防止滑鼠失焦導致頁面自動關閉 Yii2 使用 MODAL class 呈現內容時,如何防止滑鼠失焦導致頁面自動關閉

隨機好文

將資料由SFS3 移機到 SFS3U 如果您是 SFS3 的使用者,架了 SFS3U ,資料當然得轉移過來才有意義呀!

Windows Active Directory 啟動 LDAPS 連線 重架了 Windows Server 2016 也安裝了 Windows AD 服務, 當網域伺服器架好, 預設的 38

校園MSN使用說明 以下文章是為豐南國中同仁而寫, 如果您非本校教職員,就請參考就好。 期待已經的校園MSN改寫完畢了,簡單說明一下使用方法

【停課不停學】在家如何進行 SSL VPN 連線 因為疫情導致的停課 許多老師都在家使用線上教學了 但有很多資料是放在學校的, 要如何遠端取得呢? SSL VPN 連線變