Laravel package that allows inline editing of HTML blocks
dyusha/laravel-html-editor is a Laravel package for laravel package that allows inline editing of html blocks.
It currently has 24 GitHub stars and 1.184 downloads on Packagist (latest version v1.0.3).
Install it with composer require dyusha/laravel-html-editor.
Discover more Laravel packages by dyusha
or browse all Laravel packages to compare alternatives.
Last updated
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.
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
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.
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 your AuthServiceProvider
// 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>
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.
This library is licensed under the MIT license. Please see LICENSE for more details.