2012-07-16 24 views
7

¿Es posible anular la plantilla para el tipo de formulario: "sonata_type_collection"?Sonata Admin Bundle - Tipo de formulario: sonata_type_collection - plantilla personalizada?

He intentado a lo largo de estas líneas:

$formMapper->add('slides', 'sonata_type_collection', array(), array(
       'edit' => 'inline', 
       'inline' => 'table', 
       'sortable' => 'priority', 
       'template' => 'MyBundle:Form:slides.admin.html.twig' 
      )); 

pero fue en vano.

Sé que podría anular toda la plantilla, pero solo quiero hacerlo para este formulario, no en todos los lugares donde utilizo este tipo de formulario.

¿Alguien sabe si esto es posible?

Gracias

Respuesta

18

He encontrado un gran trozo de código en /vendor/sonata-project/admin-bundle/Sonata/AdminBundle/Form/Extension/Field/Type/FormTypeFieldExtension.php que en realidad establece una matriz de tipos para adjuntar a la vista de formulario que utiliza para priorizar bloque ramita de representación: (líneas 99 a 105)

// add a new block types, so the Admin Form element can be tweaked based on the admin code 
     $types = $view->getVar('types'); 
     $baseName = str_replace('.', '_', $sonataAdmin['field_description']->getAdmin()->getCode()); 
     $baseType = $types[count($types) - 1]; 

     $types[] = sprintf('%s_%s', $baseName, $baseType); 
     $types[] = sprintf('%s_%s_%s', $baseName, $sonataAdmin['field_description']->getName(), $baseType); 

por lo tanto todo lo que tenía que hacer era definir un bloque llamado mycompany_admin_content_galleries_sonata_type_collection_widget o mycompany_admin_content_galleries_slides_sonata_type_collection_widget y sólo se aplica a esta forma de administración :)

para completar esta solución en mi clase de administración añadí esta funcio n:

public function getFormTheme() 
{ 
    return array_merge(
     parent::getFormTheme(), 
     array('MyBundle:Gallery:admin.slides.html.twig') 
    ); 
} 

y yo creamos MyBundle/Resources/views/Gallery/admin.slides.html.twig, que contiene lo siguiente:

{% use 'SonataAdminBundle:Form:form_admin_fields.html.twig' %} // I think this 
      line is not really needed as the base admin's form theme uses this file 

{% block my_bundle_content_pages_slides_sonata_type_collection_widget %} 

    // copied and edited the contents of Sonata/DoctrineORMAdminBundle/Resources/views/CRUD/edit_orm_one_to_many.html.twig 

{% endblock %} 
+0

Sólo completando su respuesta, puede registrar los archivos de plantilla con la ramita de modo que no es necesario fusionar el término en el admin clase con "getFormTheme()", consulte: http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html#creating-a-template-for-the-field – Cassiano

+0

Allí donde mencionó "para definir un negro llamado ... "lo mismo que el último paso donde se crea un bloque en admin.slides.html.twig ?? ¿O dónde defines ese bloque? – Mentos93

Cuestiones relacionadas