
安裝 CKEditor v4,整合進 Voyager
CKEditor 提供「CDN 引入」及「下載至本機」兩種方式使用,前者設定方式最簡單,後者到官網下載區下載需要的版本後解壓縮到 public
資料夾內(預設資料夾名:ckeditor)。
CKEditor CDN 資源:https://cdn.ckeditor.com/
依照功能輸出可以選擇 Basic / Standard / Full 三個版本,一般使用選擇 Standard 就可以,如果做為長文章編輯則可考慮 Full 版。以下以「CDN 引入」方式說明導入流程:
先建立給 CKEditor 的 Handler:
<?php
// app/FormFields/CkeditorHandler.php
namespace App\\FormFields;
use TCG\\Voyager\\FormFields\\AbstractHandler;
class CkeditorHandler extends AbstractHandler
{
protected $codename = 'CKEditor';
public function createContent($row, $dataType, $dataTypeContent, $options)
{
return view('formfields.ckeditor', [
'row' => $row,
'options' => $options,
'dataType' => $dataType,
'dataTypeContent' => $dataTypeContent,
]);
}
}
接著建立給 CKEditor 使用的 Blade Template,這裡注意的是 textarea 標籤的 id 屬性與底下 CKEDITOR.replace
的值要相同。
{{-- /resources/views/formfields/ckeditor.blade.php --}}
<textarea class="form-control" id="ckeditor" name="{{ $row->field }}">
{!! old($row->field, $dataTypeContent->{$row->field} ?? '') !!}
</textarea>
<script src="//cdn.ckeditor.com/4.17.1/standard/ckeditor.js"></script>
<script>
CKEDITOR.replace( 'ckeditor', options);
</script>
到 AppServiceProvider 註冊 Handler 後,就可以在 Voyager 的 BREAD 編輯欄位中看到 CKEditor 了。
<?php
// /app/Providers/AppServiceProvider.php
namespace App\\Providers;
use App\\FormFields\\CkeditorHandler;
use Illuminate\\Pagination\\Paginator;
use Illuminate\\Support\\ServiceProvider;
use TCG\\Voyager\\Facades\\Voyager;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
Voyager::addFormField(CkeditorHandler::class);
}
安裝檔案管理套件,管理伺服器頁面檔案更方便
Voyager 提供了方便的媒體管理程式可以管理上傳至網站空間的檔案,不過之前在導入 Editor.md 的時候無法取用這項功能實在可惜。透過安裝 Laravel File Manager 套件可以讓 CKEditor 程式更方便上傳檔案,同時瀏覽伺服器上的文件,加上這個套件後線上編輯功能才算完整。
安裝 Laravel File Manager
用 composer 指令下載套件:
composer require unisharp/laravel-filemanager
發佈套件,將設定檔及資源檔案複製到 public 目錄:
php artisan vendor:publish --tag=lfm_config
php artisan vendor:publish --tag=lfm_public
建立同步連結,同時確保 storage
資料夾可以寫入。因為安裝 Voyager 的時候已經做過一次的關係跳過。
php artisan storage:link
chmod -R 777 storage
同步連結建立後會在 public
資料夾建立 storage
軟連結,導向 /storage/app/public
。以預設設定(/config/lfm.php)的情況 Laravel File Manager 會建立兩個資料夾:一般檔案的「files
」資料夾與圖片用的「photos
」資料夾,底下再依上傳者的會員 ID 再細分。
編輯 .env
,確認 APP_URL
屬性值是專案網址,在 Voyager 遇到圖片讀取錯誤時也是同樣解法。
在 /routes/web.php
加上上傳檔案路由:
Route::group(['prefix' => 'laravel-filemanager', 'middleware' => ['web', 'auth']], function () {
\\UniSharp\\LaravelFilemanager\\Lfm::routes();
});
接著瀏覽:專案網址/laravel-filemanager/demo 看看能否看到展示頁面,進行操作。
與編輯器整合
Laravel File Manager 可與常見的 WYSIWYG 編輯器整合,其中又以 CKEditor 的整合最簡單。在上述作業完成後回頭編輯 CKEditor 的 Blade template 檔案,加入 Laravel File Manager 敘述後是以下內容:
{{-- /resources/views/formfields/ckeditor.blade.php --}}
<textarea class="form-control" id="ckeditor" name="{{ $row->field }}">
{!! old($row->field, $dataTypeContent->{$row->field} ?? '') !!}
</textarea>
<script src="//cdn.ckeditor.com/4.17.1/standard/ckeditor.js"></script>
<script>
var options = {
filebrowserImageBrowseUrl: '/laravel-filemanager?type=Images',
filebrowserImageUploadUrl: '/laravel-filemanager/upload?type=Images&_token=',
filebrowserBrowseUrl: '/laravel-filemanager?type=Files',
filebrowserUploadUrl: '/laravel-filemanager/upload?type=Files&_token='
};
</script>
<script>
CKEDITOR.replace( 'ckeditor', options);
</script>
之後在 CKEditor 上傳檔案或圖片時可以點選「瀏覽伺服器」按鈕啟動 Laravel File Manager 進行檔案管理。
介面在地化
操作介面的翻譯檔位於 vendor/unisharp/laravel-filemanager/src/lang
將其複製為:
Laravel 8:/resources/lang/vendor/laravel-filemanager/<YOUR LANGUAGE>/lfm.php
Laravel 9:/lang/vendor/laravel-filemanager/zh_TW/lfm.php
(正體中文) .
參考資料
居住在臺灣的 Joomler,期望以程式設計、開放原碼推廣活動收入養活一家老小。
35 歲後改姓李,id 作為曾為郭姓的證明。
FFXI:Abokuo@Sylph鯖、よろしくです。
It's great that you are getting thoughts from this paragraph as well as from
our discussion made at this time.
Nоbody in life ɡets exactly what they thought they werе going
to get. But if you work гeally hard and you'гe kind,
ɑmazing thingѕ will happen.
Cool post ! Thanks for, posting on my blog
man. I shall message you again! I didnt know that.