add collection block

This commit is contained in:
Simon Vieille 2021-05-16 15:26:27 +02:00
parent 62d1f09f6e
commit 0fddd78b11
3 changed files with 113 additions and 0 deletions

View File

@ -0,0 +1,22 @@
<?php
namespace App\Core\Entity\Site\Page;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
/**
* @ORM\Entity
*/
class CollectionBlock extends Block
{
public function getValue()
{
return json_decode(parent::getValue(), true);
}
public function setValue($value): self
{
return parent::setValue(json_encode($value));
}
}

View File

@ -0,0 +1,51 @@
<?php
namespace App\Core\Form\Site\Page;
use App\Core\Entity\Site\Page\Block;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\CallbackTransformer;
class CollectionBlockType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add(
'value',
CollectionType::class,
array_merge([
'required' => false,
'label' => false,
], $options['options']),
);
}
/**
* {@inheritdoc}
*/
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars = array_replace($view->vars, [
'collection_name' => $options['collection_name'],
'label_add' => $options['label_add'],
'label_delete' => $options['label_delete'],
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Block::class,
'collection_name' => '',
'label_add' => 'Add',
'label_delete' => 'Delete',
'options' => [],
]);
}
}

View File

@ -36,3 +36,43 @@
</div>
</div>
{% endblock %}
{% block collection_block_widget %}
<div data-collection="collection-{{ collection_name }}">
{% for item in form.value %}
<div data-collection-item="{{ loop.index }}">
{% for child in item %}
{{ form_row(child) }}
{% endfor %}
</div>
<div class="text-right">
<span data-collection-delete-container class="btn btn-sm btn-danger">
<span data-collection-delete="{{ loop.index }}">
{{ label_delete|trans }}
</span>
</span>
</div>
{% endfor %}
</div>
<div data-collection-add="collection-{{ collection_name }}" class="collection-add">
<span class="btn btn-sm btn-primary" data-collection-add="collection-{{ collection_name }}">
<span class="fa fa-plus"></span>
{{ label_add|trans }}
</span>
</div>
<template type="text/template" id="collection-{{ collection_name }}">
<div data-collection-item="__name__">
{{ form_rest(form.value.vars.prototype) }}
<div class="text-right">
<span data-collection-delete-container class="btn btn-sm btn-danger">
{{ label_delete|trans }}
</span>
</div>
</div>
</template>
{% endblock %}