| Package Data | |
|---|---|
| Maintainer Username: | dyusha |
| Maintainer Contact: | leelfosho@gmail.com (dyusha) |
| Package Create Date: | 2016-07-31 |
| Package Last Update: | 2016-10-19 |
| Home Page: | |
| Language: | CSS |
| License: | MIT |
| Last Refreshed: | 2025-10-30 03:13:43 |
| Package Statistics | |
|---|---|
| Total Downloads: | 1,184 |
| Monthly Downloads: | 0 |
| Daily Downloads: | 0 |
| Total Stars: | 24 |
| Total Watchers: | 2 |
| Total Forks: | 7 |
| Total Open Issues: | 0 |
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.