dyusha / laravel-html-editor
Laravel package that allows inline editing of HTML blocks
Installs: 1 182
Dependents: 0
Suggesters: 0
Security: 0
Stars: 25
Watchers: 2
Forks: 7
Open Issues: 0
Language:CSS
Requires
- php: >=5.6
- illuminate/database: ^5.2
- illuminate/support: ^5.2
Requires (Dev)
- phpunit/phpunit: ^5.4
This package is not auto-updated.
Last update: 2024-11-23 19:48:35 UTC
README
This package adds an ability to inline edit any defined HTML block in your Laravel app. It uses awesome MediumEditor wrapped into Vue.js components.
Installation
Install this package via composer:
composer require dyusha/laravel-html-editor
Install required npm packages:
npm install vue vue-resource medium-editor --save
Add service provider to your config file:
// config/app.php 'providers' => [ ... Dyusha\HtmlEditor\HtmlBlocksProvider::class, ],
After that you will be able to publish config, migrations, views and needed assets.
By default js and sass assets will be published to /resources/assets/js/components
and /resources/assets/sass/plugins
directories respectively. In order to override these settings you need to publish config file.
php artisan vendor:publish --provider="Dyusha\HtmlEditor\HtmlBlocksProvider" --tag=config
and change following paths
// config/html-editor.php 'paths' => [ 'js' => base_path('/resources/assets/js/components'), 'sass' => base_path('/resources/assets/sass/plugins'), ],
Publish remaining assets and migrations:
php artisan vendor:publish --provider="Dyusha\HtmlEditor\HtmlBlocksProvider"
Apply migrations:
php artisan migrate
Usage
This package provides custom Blade directives @block
and @endblock
which can be used to wrap blocks of HTML that should be editable. For example if somewhere in your template you will have the following code
@block('hero-text', 'Homepage hero text') <h1>Lorem ipsum dolor sit amet</h1> @endblock
the first time it's being rendered directive will try to find HTML block with slug hero-text
in the database. If it is present then its content will be rendered on the page. Otherwise new HTML block will be created with slug hero-text
, optional description Homepage hero text
and content Lorem ipsum dolor sit amet
. You can put any HTML markup between @block
and @endblock
directives.
In order to edit such blocks you need to follow few steps:
-
Somewhere in your layout add partial that will render required controls
@include('html-editor::html-manager')
-
By default editing is allowed only for users who have
edit-html-blocks
ability so you should add it in yourAuthServiceProvider
// app/Providers/AuthServiceProvider.php public function boot(GateContract $gate) { $gate->define('edit-html-blocks', function ($user) { // Add your logic here return true; }); }
-
Include provided scss and js files on the page using your preferred build tools
-
Include Vue.js components in your root instance or another component:
// resources/assets/js/app.js var Vue = require('vue'); new Vue({ el: 'body', components: { htmlManager: require('./components/cms/manager'), htmlBlock: require('./components/cms/block'), }, });
You can learn more about Vue.js components here.
At this point all HTML blocks wrapped in @block
directive should be rendered on a page as <html-block>
component and be editable:
<html-block slug="hero-text"> <h1>Lorem ipsum dolor sit amet</h1> </html-block>
Updating blocks
When you press Accept changes
button <html-manager>
component will send POST
request to /admin/blocks
with blocks
param that will contain all changed HTML blocks.
License
This library is licensed under the MIT license. Please see LICENSE for more details.