1) Install package
composer require unisharp/laravel-filemanager
2) (optional) Edit config/app.php
:
* For Laravel 5.5 and up, skip to step 3. All service providers and facades are automatically discovered.
Add service providers
UniSharp\LaravelFilemanager\LaravelFilemanagerServiceProvider::class,
Intervention\Image\ImageServiceProvider::class,
And add class aliases
'Image' => Intervention\Image\Facades\Image::class,
Code above is for Laravel 5.1. In Laravel 5.0 should leave only quoted class names.
3) Publish the package’s config and assets :
php artisan vendor:publish --tag=lfm_config
php artisan vendor:publish --tag=lfm_public
4) (optional) Run commands to clear cache :
php artisan route:clear
php artisan config:clear
5) Ensure that the files & images directories (in config/lfm.php
) are writable by your web server (run commands like chown
or chmod
).
6) Create symbolic link :
php artisan storage:link
7) Edit APP_URL
in .env.
8) Edit routes/web.php :
Create route group to wrap package routes.
Route::group(['prefix' => 'laravel-filemanager', 'middleware' => ['web', 'auth']], function () { \UniSharp\LaravelFilemanager\Lfm::routes(); });
Make sure auth middleware is present to :
9) Make sure database exists
10) login and visit /laravel-filemanager/demo
<textarea id="my-editor" name="content" class="form-control">{!! old('content', 'test editor content') !!}</textarea> <script src="//cdn.ckeditor.com/4.6.2/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> <!-- Sample 1 - Replace by ID: --> <script> CKEDITOR.replace('my-editor', options); </script> <!-- Sample 2 - With JQuery Selector: --> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script src="/vendor/unisharp/laravel-ckeditor/adapters/jquery.js"></script> <script> $('textarea.my-editor').ckeditor(options); </script>
<script src="/path-to-your-tinymce/tinymce.min.js"></script> <textarea name="content" class="form-control my-editor">{!! old('content', $content) !!}</textarea> <script> var editor_config = { path_absolute : "/", selector: 'textarea.my-editor', relative_urls: false, plugins: [ "advlist autolink lists link image charmap print preview hr anchor pagebreak", "searchreplace wordcount visualblocks visualchars code fullscreen", "insertdatetime media nonbreaking save table directionality", "emoticons template paste textpattern" ], toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image media", file_picker_callback : function(callback, value, meta) { var x = window.innerWidth || document.documentElement.clientWidth || document.getElementsByTagName('body')[0].clientWidth; var y = window.innerHeight|| document.documentElement.clientHeight|| document.getElementsByTagName('body')[0].clientHeight; var cmsURL = editor_config.path_absolute + 'laravel-filemanager?editor=' + meta.fieldname; if (meta.filetype == 'image') { cmsURL = cmsURL + "&type=Images"; } else { cmsURL = cmsURL + "&type=Files"; } tinyMCE.activeEditor.windowManager.openUrl({ url : cmsURL, title : 'Filemanager', width : x * 0.8, height : y * 0.8, resizable : "yes", close_previous : "no", onMessage: (api, message) => { callback(message.content); } }); } }; tinymce.init(editor_config); </script>
<script src="//cdn.tinymce.com/4/tinymce.min.js"></script> <textarea name="content" class="form-control my-editor">{!! old('content', $content) !!}</textarea> <script> var editor_config = { path_absolute : "/", selector: "textarea.my-editor", plugins: [ "advlist autolink lists link image charmap print preview hr anchor pagebreak", "searchreplace wordcount visualblocks visualchars code fullscreen", "insertdatetime media nonbreaking save table contextmenu directionality", "emoticons template paste textcolor colorpicker textpattern" ], toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image media", relative_urls: false, file_browser_callback : function(field_name, url, type, win) { var x = window.innerWidth || document.documentElement.clientWidth || document.getElementsByTagName('body')[0].clientWidth; var y = window.innerHeight|| document.documentElement.clientHeight|| document.getElementsByTagName('body')[0].clientHeight; var cmsURL = editor_config.path_absolute + 'laravel-filemanager?field_name=' + field_name; if (type == 'image') { cmsURL = cmsURL + "&type=Images"; } else { cmsURL = cmsURL + "&type=Files"; } tinyMCE.activeEditor.windowManager.open({ file : cmsURL, title : 'Filemanager', width : x * 0.8, height : y * 0.8, resizable : "yes", close_previous : "no" }); } }; tinymce.init(editor_config); </script>
<!-- dependencies (Summernote depends on Bootstrap & jQuery) --> <link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css" rel="stylesheet"> <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js"></script> <script src="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script> <link href="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.3/summernote.css" rel="stylesheet"> <script src="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.3/summernote.js"></script> <!-- markup --> <textarea id="summernote-editor" name="content">{!! old('content', $content) !!}</textarea> <!-- summernote config --> <script> $(document).ready(function(){ // Define function to open filemanager window var lfm = function(options, cb) { var route_prefix = (options && options.prefix) ? options.prefix : '/laravel-filemanager'; window.open(route_prefix + '?type=' + options.type || 'file', 'FileManager', 'width=900,height=600'); window.SetUrl = cb; }; // Define LFM summernote button var LFMButton = function(context) { var ui = $.summernote.ui; var button = ui.button({ contents: '<i class="note-icon-picture"></i> ', tooltip: 'Insert image with filemanager', click: function() { lfm({type: 'image', prefix: '/laravel-filemanager'}, function(lfmItems, path) { lfmItems.forEach(function (lfmItem) { context.invoke('insertImage', lfmItem.url); }); }); } }); return button.render(); }; // Initialize summernote with LFM button in the popover button group // Please note that you can add this button to any other button group you'd like $('#summernote-editor').summernote({ toolbar: [ ['popovers', ['lfm']], ], buttons: { lfm: LFMButton } }) }); </script>