murph-doc/docs/utils/editors/grapesjs.md
Simon Vieille 385af624a6
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
update theme
2023-02-09 21:50:06 +01:00

130 lines
2.8 KiB
Markdown

# GrapesJS
GrapesJS is a web builder which combines different tools and features with the goal to help users to build HTML templates without any knowledge of coding. It's a very good solution to replace the common WYSIWYG editor like TinyMCE.
GrapesJS is fully integrated in Murph as form types.
![](/_static/img/editors/grapesjs.png)
## Classic form
```php-inline
// src/Form/ExampleType.php
namespace App\Form\ExampleType;
use App\Core\Form\Type\GrapesJsType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class ExampleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add(
'myField',
GrapesJsType::class
);
// ...
}
// ...
}
```
## Page form
```php-inline
// src/Entity/Page/YourPage.php
namespace App\Entity\Page;
use App\Core\Entity\Site\Page\Block;
use App\Core\Form\Site\Page\GrapesJsBlockType;
#[ORM\Entity]
class YourPage extends Page
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add(
'myBlock',
GrapesJsBlockType::class,
[
'label' => 'My block',
'row_attr' => [
],
'options' => [
// options given to the sub form
],
]
);
// ...
}
public function setMyBlock(Block $block)
{
return $this->setBlock($block);
}
public function getMyBlock(): Block
{
return $this->getBlock('myBlock');
}
// ...
}
```
## Options
There are 3 modes:
* Bootstrap 4 (default): `bootstrap4`
* Preset webpage: `presetWebpage`
* Preset newsletter: `presetNewsletter`
To specify a mode, you must define the attribute `data-grapesjs`:
```php-inline title="src/Form/ExampleType.php"
$builder->add(
'myField',
GrapesJsType::class,
[
// ...
'attr' => [
'data-grapesjs' => 'bootstrap4',
],
]
);
```php-inline title="src/Entity/Page/YourPage.php"
$builder->add(
'myBlock',
GrapesJsBlockType::class,
[
// ...
'options' => [
'attr' => [
'data-grapesjs' => 'bootstrap4',
],
],
]
);
```
## Rendering
GrapesJS will generate a JSON which contains HTML and CSS.
* To extract HTML: `{% set html = value|grapesjs_html %}`
* To extract CSS: `{% set css = value|grapesjs_css %}`
Depending of the mode, you will need to import in the app sass file:
* Bootstrap 4: `@import "~bootstrap/scss/bootstrap.scss";`
* Preset webpage: `@import "~grapesjs-preset-webpage/dist/grapesjs-preset-webpage.min.css";`
* Preset newsletter: `@import "~grapesjs-preset-newsletter/dist/grapesjs-preset-newsletter.css";`