usar tutorial sinphony que instalar framework español symfony sonata-admin

tutorial - Cómo agregar un enlace o botón personalizado a SonataAdminBundle Dashboard en Symfony2



symfony 4 español (2)

Para mostrar elementos personalizados en el dashbord Sonata Admin usa Sonata Block Bundle. Para agregar un enlace o botón personalizado, necesita crear un nuevo bloque usando Sonata Block Bundle. La plantilla principal (dashboard.html.twig) del paquete de administración itera los bloques que están configurados para ejecutarse (en config.yml de la aplicación). Aún así, el paquete de administración itera todos los bloques de su entidad en la plantilla block_admin_list.html.twig. Al crear su plantilla de bloque personalizada, desde aquí puede tomar el diseño para envolver sus grupos (secciones) y botones personalizados para que tengan la misma sensación que los grupos de entidades.

Ok, fue una introducción.

Por ejemplo queremos hacer boletines personalizados de la sección.

Hay pasos

  1. crear nueva clase de bloque que implementa BlockBundleInterface
  2. crear nueva plantilla de bloque
  3. crear un servicio de bloque (lea y entienda qué son los servicios en la biblioteca de Symfony 2)
  4. agregar un servicio recién creado a la configuración de Sonata Block Bundle
  5. agregar un servicio recién creado a la configuración de Sonata Admin Bundle
  6. ingrese al tablero y disfrute de la nueva plantilla de grupo / botón / enlace / lo que sea que usted ponga en su bloque :)

Ad1) Crear nueva clase de bloque

Instrucciones generales bajo: http://sonata-project.org/bundles/block/master/doc/reference/your_first_block.html

Mi archivo se ve así:

<?php namespace InstitutoStorico/Bundle/NewsletterBundle/Block; use Symfony/Component/HttpFoundation/Response; use Sonata/AdminBundle/Form/FormMapper; use Sonata/AdminBundle/Validator/ErrorElement; use Sonata/BlockBundle/Model/BlockInterface; use Sonata/BlockBundle/Block/BaseBlockService; class NewsletterBlockService extends BaseBlockService { public function getName() { return ''My Newsletter''; } public function getDefaultSettings() { return array(); } public function validateBlock(ErrorElement $errorElement, BlockInterface $block) { } public function buildEditForm(FormMapper $formMapper, BlockInterface $block) { } public function execute(BlockInterface $block, Response $response = null) { // merge settings $settings = array_merge($this->getDefaultSettings(), $block->getSettings()); return $this->renderResponse(''InstitutoStoricoNewsletterBundle:Block:block_my_newsletter.html.twig'', array( ''block'' => $block, ''settings'' => $settings ), $response); } }

Agregué algunas líneas leyendo archivos de código de Sonata Media Bundle.

Ad2) Crear nueva plantilla de bloque

Diseño que tomé del block_admin_list.html.twig del paquete de Sonata Admin.

Mi archivo se ve así:

{% extends ''SonataBlockBundle:Block:block_base.html.twig'' %} {% block block %} <table class="table table-bordered table-striped sonata-ba-list"> <thead> <tr> <th colspan="3">Newsletter - inviare</th> </tr> </thead> <tbody> <tr> <td> <div class="btn-group" align="center"> <a class="btn btn-small" href="#">Servizio Newsletter</a> </div> </td> </tr> </tbody> </table> {% endblock %}

Ad3) Crear servicio de bloque.

En su paquete hay un archivo donde declara servicios (services.yml o admin.yml). Lo que sea. Pero es importante que esté conectado a config.yml de su aplicación en la sección "importaciones".

Mi declaración de servicio se ve así:

sonata.block.service.newsletter: class: InstitutoStorico/Bundle/NewsletterBundle/Block/NewsletterBlockService arguments: [ "sonata.block.service.newsletter", @templating ] tags: - { name: sonata.block }

Ad4) Agregar servicio recién creado a la configuración de Sonata Block Bundle

Esta configuración se coloca en config.yml de su aplicación.

Mi configuración se ve así:

#Sonata Block Bundle sonata_block: default_contexts: [cms] blocks: sonata.admin.block.admin_list: contexts: [admin] sonata.block.service.text: ~ sonata.block.service.action: ~ sonata.block.service.rss: ~ sonata.block.service.newsletter: ~

Ad5) Agregar un servicio recién creado a la configuración de Sonata Admin Bundle

Esta configuración se coloca en config.yml de su aplicación.

Mi configuración se ve así:

# Sonata Admin Generator sonata_admin: ... dashboard: blocks: # display a dashboard block - { position: left, type: sonata.admin.block.admin_list } - { position: left, type: sonata.block.service.newsletter}

Ad6) Entrar en el tablero y disfrutar

Mi cuadro de mandos se ve así:

http://img805.imageshack.us/img805/2789/immaginezuq.png

Eso es todo. Parece complicado, pero para ser sincero no es tanto. Es importante que sea una forma limpia de modificar la página de su panel de control sin anular plantillas enteras sin una gran necesidad. Todos aquellos que aprendieron a leer el código fuente de Admin Bundle :) Todo el día

Soy nuevo con Symfony2 y SonataAdminBundle.

He añadido 3 entidades al panel de SonataAdminBundle y aparecen correctamente.

Las entidades aparecen con los enlaces predeterminados: botones "Agregar nuevo" y "Lista".

Quiero poder hacer lo siguiente

  1. Quiero agregar un tercer enlace a una de las entidades en el panel de control.
  2. Quiero poder agregar un enlace a los botones ubicados arriba de la cuadrícula en la página de lista predeterminada.
  3. Quiero poder agregar / personalizar los enlaces que aparecen debajo del formulario en Editar o Crear nueva página

No he podido encontrar una manera de hacer nada de lo anterior, he estado buscando por horas, cualquier ayuda será muy apreciada.

Gracias.


Tuve problemas con el método de ejecución (estoy usando Sonata 2.3.x). Aquí está el código que funciona para mí.

Tenga en cuenta BlockContextInterface y $ blockContext-> getBlock ():

public function execute(BlockContextInterface $blockContext, Response $response = null) { // merge settings $settings = array_merge($this->getDefaultSettings(), $blockContext->getSettings()); return $this->renderResponse(''bundleName:Block:templateName.html.twig'', array( ''block'' => $blockContext->getBlock(), ''settings'' => $settings ), $response); }