2012-04-13 18 views
5

Tengo una entidad. Necesito ejecutar algún código JS cuando la entidad se carga en una ventana emergente. ¿Hay alguna forma de agregar un código JS/HTML personalizado a un formulario de entidad a través de la configuración de clase de administrador? P.ej. para pasar una plantilla como una opción¿Cómo agregar el código JS al formulario de entidad?

Respuesta

7

Usted puede hacerlo de esta manera: -

  1. añadir un parámetro de clase en su FormMapper así: -

    protegidas configureFormFields de función (FormMapper $ formMapper) {$ formMapper -> add ('description', null, array ('attr' => array ('class' => 'for_popup'), 'required' => false)) }

  2. Extender el edit.html.twig/base_edit.html.twig a partir de plantillas CRUD Sonata

--- 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 su edit.html.twig en lugar de Sonata CRUD definiéndolo en la función getEditTemplate (dentro de su clase Admin).

public function getEditTemplate() 
{ 
    return 'YourAdminBundle:ControllerName:edit.html.twig'; 
} 

También puede establecer la plantilla de edición personalizada cuando se inyecta el servicio de administración.

<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> 
+0

base_edit debe extender la plantilla crud sonata? Debo especificar extender la etiqueta en esta plantilla o simplemente puedo colocar esta plantilla en la misma ruta que en el paquete sonata? Gracias por su ayuda –

+0

No toque nada en Sonata. Copie la base_edit.html.twig de sonata en su carpeta YourBundle/Resources/YourController /. Actualizaré la respuesta para explicar cómo. – Amit

+0

Sonata aparentemente ha reemplazado la función getEditTemplate() con getTemplate ('edit'), por lo que es más difícil. Lo que terminé haciendo fue: $ this-> setTemplate ('edit', 'MyBundle: Admin: edit_user.html.twig'); dentro de configureFormFields() de mi administrador – Jessica

3

@Jessica En lugar de utilizar $ this-> setTemplate() dentro del método configureFormFields de la clase de administración, en su lugar puede añadir su propia implementación del método getTemplate, la mía tiene el siguiente aspecto:

/** 
* 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; 
    } 
} 
Cuestiones relacionadas