A visualizzare gli elementi personalizzati nel dashbord Sonata Admin utilizza il pacchetto Sonata Block. Per aggiungere un collegamento o un pulsante personalizzato è necessario creare un nuovo blocco utilizzando il pacchetto Sonata Block. Il modello principale (dashboard.html.twig) del pacchetto di amministrazione itera i blocchi configurati per l'esecuzione (in config.yml dell'applicazione). Still, Admin Bundle esegue l'iterazione di tutti i blocchi di entità nel modello block_admin_list.html.twig. Creando il tuo modello di blocco personalizzato è da qui che puoi prendere il layout per avvolgere i tuoi gruppi personalizzati (sezioni) e pulsanti in modo da avere la stessa sensazione di quelli dei gruppi di entità.
Ok, era l'introduzione.
per esempio vogliamo rendere sezione Newsletter personalizzata.
ci sono passi:
- creano nuova classe di blocco che implementa BlockBundleInterface
- creare un nuovo modello di blocco
- creare il servizio di blocco (leggere e capire quali sono i servizi in Symfony 2 biblioteca)
- add nuovo servizio creato per la configurazione del bundle Sonata Block
- aggiungi un nuovo servizio alla configurazione del bundle di Sonata Admin
- entrare cruscotto e godere di nuovo gruppo/pulsante/link/qualunque cosa-stuff-you-messa-in-your-block-template :)
Ad1) Crea nuova classe di blocco
Istruzioni generali sotto: http://sonata-project.org/bundles/block/master/doc/reference/your_first_block.html
il mio file è simile al seguente:
<?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);
}
}
ho aggiunto alcune righe di lettura file di codice Sonata media Bundle.
Ad2) Crea nuovo modello di blocco
layout ho preso da block_admin_list.html.twig della Sonata Admin fascio.
Il mio file è simile al seguente:
{% 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) creare il servizio di blocco
Nel vostro pacco c'è un file in cui si dichiara servizi (services.yml o admin.yml). Qualunque cosa. Ma è importante che sia collegato a config.yml dell'applicazione nella sezione "importazioni".
La mia dichiarazione di servizio simile a questa:
sonata.block.service.newsletter:
class: InstitutoStorico\Bundle\NewsletterBundle\Block\NewsletterBlockService
arguments: [ "sonata.block.service.newsletter", @templating ]
tags:
- { name: sonata.block }
Ad4) Aggiungi nuovo servizio creato per la configurazione Sonata Block Bundle
Questa configurazione viene messo in config.yml della vostra applicazione.
mio config si presenta così:
#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) Aggiungi nuovo servizio creato per configurazione Sonata Admin Bundle
Questa configurazione viene messo in config.yml della vostra applicazione.
mio config si presenta così:
# 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) Inserisci cruscotto e godere
Dashboard si presenta così:
http://img805.imageshack.us/img805/2789/immaginezuq.png
Questo è tutto. Sembra complicato, ma per essere sinceri non è così tanto. È importante che sia un modo pulito di modificare la pagina della dashboard senza sovrascrivere modelli interi senza necessità. Tutti quelli che ho imparato leggendo il codice sorgente di Admin Bundle :) Intera giornata
Ho usato questo http://stackoverflow.com/questions/11725476/add-custom-button-to-edit-page -of-sonata-admin-bundle? rq = 1 e utilizzato la personalizzazione dei modelli di bundle copiando il modello in app/Resources/ /views/Block/block_admin_list.html.twig più informazioni di questo collegamento http: // sonata- project.org/bundles/admin/master/doc/reference/templates.html si è rivelato utile –
dagger