add collection block
This commit is contained in:
parent
62d1f09f6e
commit
0fddd78b11
22
core/Entity/Site/Page/CollectionBlock.php
Normal file
22
core/Entity/Site/Page/CollectionBlock.php
Normal 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));
|
||||||
|
}
|
||||||
|
}
|
51
core/Form/Site/Page/CollectionBlockType.php
Normal file
51
core/Form/Site/Page/CollectionBlockType.php
Normal 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' => [],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -36,3 +36,43 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% 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 %}
|
||||||
|
|
Loading…
Reference in a new issue