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: | 2024-11-19 03:14:20 |
Package Statistics | |
---|---|
Total Downloads: | 1,181 |
Monthly Downloads: | 3 |
Daily Downloads: | 0 |
Total Stars: | 25 |
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.