Reputation: 1061
I have an entity. I need to execute some JS code when entity loads in a popup. Is there any way to add a custom JS/HTML code to an entity form via admin class configuration. E.g. to pass a template as an option
Upvotes: 6
Views: 5192
Reputation: 475
@Jessica Instead of using $this->setTemplate() inside the configureFormFields method of your admin class, you can instead add your own implementation of the getTemplate method, mine looks like this:
/**
* Override core method to display custom template(s)
*/
public function getTemplate($name)
{
switch ($name) {
case 'edit':
return 'YourAdminBundle:YourAdminEntity:edit.html.twig';
break;
default:
return parent::getTemplate($name);
break;
}
}
Upvotes: 3
Reputation: 3754
You can do it this way:-
Add a class parameter in your FormMapper like this:-
protected function configureFormFields(FormMapper $formMapper) { $formMapper ->add('description', null, array('attr' => array('class' => 'for_popup'), 'required' => false)) }
Extend the edit.html.twig
/ base_edit.html.twig
from Sonata CRUD Templates
---edit.html.twig----
{% extends 'YourBundle:YourAdminClass:base_edit.html.twig' %}
---base_edit.html.twig---
{% block javascripts %}
{{ parent() }}
<script type="text/javascript">
// Your JS code here
</script>
{% endblock %}
Use your edit.html.twig
instead of Sonata CRUD's by defining it in the getEditTemplate function (within your Admin class).
public function getEditTemplate()
{
return 'YourAdminBundle:ControllerName:edit.html.twig';
}
You can also set the custom edit template when you inject the admin service.
<service id="sonata.admin.bf" class="Wyzbiz\Bundle\MainBundle\Admin\BfAdmin">
<tag name="sonata.admin" manager_type="orm" group="Content" label="BFs"/>
<argument />
<argument>Wyzbiz\Bundle\MainBundle\Entity\Bf</argument>
<argument>WyzbizMainBundle:CRUD</argument>
<call method="setTranslationDomain"><argument>WyzbizMainBundle</argument></call>
<call method="setTemplate"><argument>list</argument>
<argument>WyzbizMainBundle:CRUD/Bf:list.html.twig</argument></call>
</service>
Upvotes: 7