2012-04-13 12 views
5

Ho un'entità. Ho bisogno di eseguire qualche codice JS quando l'entità viene caricata in un popup. C'è un modo per aggiungere un codice JS/HTML personalizzato a un modulo entità tramite la configurazione della classe admin. Per esempio. passare un modello come opzioneCome aggiungere codice JS al modulo entità?

risposta

7

si può fare in questo modo: -

  1. Aggiungere un parametro di classe nel vostro FormMapper in questo modo: -

    configureFormFields funzione protetta (FormMapper $ formMapper) {$ formMapper -> add ('descrizione', null, array ('attr' => array ('class' => 'for_popup'), 'required' => false)) }

  2. Estendere il edit.html.twig/base_edit.html.twig dalla Sonata CRUD Modelli

--- 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 %} 

Usa il tuo edit.html.twig invece di Sonata CRUD definendolo nella funzione getEditTemplate (all'interno della classe Admin).

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

È anche possibile impostare il modello di modifica personalizzato quando si inserisce il servizio di amministrazione.

<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 dovrebbe estendere il modello di sonata crud? Dovrei specificare il tag di estensione in questo modello o posso semplicemente posizionare questo modello nello stesso percorso del bundle sonata? Grazie per il vostro aiuto –

+0

Non toccare nulla in Sonata. Copia semplicemente il file base_edit.html.twig nella cartella YourBundle/Resources/YourController /. Aggiornerò la risposta per spiegare come. – Amit

+0

Sonata ha apparentemente sostituito la funzione getEditTemplate() con getTemplate ('edit'), rendendo questo più difficile. Quello che ho finito è stato: $ this-> setTemplate ('edit', 'MyBundle: Admin: edit_user.html.twig'); all'interno del mio admin configureFormFields() – Jessica

3

@Jessica Invece di usare $ this-> setTemplate() all'interno del metodo configureFormFields della classe di amministrazione, è possibile invece aggiungere la tua implementazione del metodo getTemplate, miniera assomiglia a questo:

/** 
* 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; 
    } 
} 
Problemi correlati