Unleash creativity within Laravel Nova using the TinyMCE plugin, making content creation a breeze with its user-friendly and dynamic editing capabilities.
- π· Upload images support (BETA)
- π Dark mode support
- π Switch between 5 or 6 versions of TinyMCE
- β Can be disabled (by passing readonly() to make method)
Important
Want some steroids for your TinyMCE? Check out our new * ChatGTP for TinyMCE* plugin! πππ
This package follows the following versioning scheme:
- v1.x - TinyMCE 5 or 6
- v0.x - TinyMCE version 5 (deprecated)
- Laravel >= 9
- PHP >= 8.0
- Laravel Nova >= 4
- TinyMCE API Key (get one here)
In the root of your Laravel installation launch:
composer require murdercode/nova4-tinymce-editor
Then publish the config:
php artisan vendor:publish --provider="Murdercode\TinymceEditor\FieldServiceProvider"
A file in config/nova_tinymce_editor.php
will appear as follows (you can change the default values):
<?php
return [
'cloudChannel' => '6', // 5 or 6
/**
* Get your API key at https://www.tiny.cloud and put it here or in your .env file
*/
'apiKey' => env('TINYMCE_API_KEY', ''),
/**
* The default skin to use.
*/
'skin' => 'oxide-dark',
/**
* The default options to send to the editor.
* See https://www.tiny.cloud/docs/configure/ for all available options (check for 5 or 6 version).
*/
'init' => [
'menubar' => false,
'autoresize_bottom_margin' => 40,
'branding' => false,
'image_caption' => true,
'paste_as_text' => true,
'autosave_interval' => '20s',
'autosave_retention' => '30m',
'browser_spellcheck' => true,
'contextmenu' => false,
//'images_upload_url' => '/nova-vendor/murdercode/tinymce/upload', // Uncomment to enable image upload
],
'plugins' => [
'advlist',
'anchor',
'autolink',
'autosave',
'fullscreen',
'lists',
'link',
'image',
'media',
'table',
'code',
'wordcount',
'autoresize',
],
'toolbar' => [
'undo redo restoredraft | h2 h3 h4 |
bold italic underline strikethrough blockquote removeformat |
align bullist numlist outdent indent | link anchor table | code fullscreen spoiler',
],
/**
* Extra configurations for the editor.
*/
'extra' => [
'upload_images' => [
'enabled' => false, // Uncomment to enable
'folder' => 'images',
'maxSize' => 2048, // KB
'disk' => 'public',
],
],
];
In your .env
file please add the key (get one here):
TINYMCE_API_KEY=[YOUR_PRECIOUS_PRIVATE_KEY]
Please make sure that you have added domain in your tiny.cloud account list or you will get an error notice message.
In your Nova/Resource.php add the field as following:
<?php
use Murdercode\TinymceEditor\TinymceEditor;
class Article extends Resource
{
//...
public function fields(NovaRequest $request)
{
return [
TinymceEditor::make(__('Content'), 'content')
->rules(['required', 'min:20'])
->fullWidth()
->help(__('The content of the article.')),
];
}
}
//...
Warning
This feature is in BETA and can be unstable or contain bugs/security flaws. We provide it as is, without any warranty. For this reason, is disabled by default.
To enable image upload, you must publish the configuration file with:
php artisan vendor:publish --provider="Murdercode\TinymceEditor\FieldServiceProvider"
then in your config
file config/nova-tinymce-editor.php
:
<?php
// Uncomment the following line
'images_upload_url' => '/nova-vendor/murdercode/tinymce/upload',
// Set the following to true
'extra' => [
'upload_images' => [
'enabled' => false, // Uncomment to enable
'folder' => 'images',
'maxSize' => 2048, // KB
'disk' => 'public',
],
],
Please be sure that image
plugin and toolbar button are enabled in your config file.
You can to control what contents should be protected from editing while it gets passed into the editor. This is useful for example when you want to protect PHP code from been formatted.
To do this, you must publish the configuration file and add the following line:
<?php
return [
'init' => [
// ... Your awesome init config ...
/**
* Set what content should be protected while editing
* This should be a regular expression
* E.g "/<\?php.*?\?>/g" - Protect PHP code from been formatted
*/
'protect' => []
];
//...
TinyMCE allows you to use an alternative mirror for scripts. It will be useful if you want to use a non-cloud version (and avoid the new mechanism pricing of Tiny.cloud).
You can simply add in app/Providers/NovaServiceProvider.php
:
class NovaServiceProvider extends NovaApplicationServiceProvider
{
/**
* Bootstrap any application services.
*/
public function boot(): void
{
parent::boot();
// TinyMCE Mirror
Nova::script('custom', 'https://cdn.jsdelivr.net/npm/tinymce@6/tinymce.min.js');
// ...
}
}
TinyMCE will automatic check if there's a script and I'll ignore his script from tiny cloud.
The transition to 1.1 involves the use of a new configuration layout compatible with the previous version.
However, if you want to use the new image upload and version change features, it is recommended that you make a
new php artisan vendor:publish
.
In composer.json
change the version of the package to
"murdercode/nova4-tinymce-editor": "^1.0"
and run composer update
.
Also, you must change the format of the plugin snippet in nova-tinymce-editor
as follows:
0.x
'plugins' => [
'anchor advlist autolink autoresize autosave code fullscreen link lists image imagetools media
paste wordcount',
],
1.x
'plugins' => [
'anchor',
'advlist',
// etc...
],
Test, PR (also of this doc) are welcome.