2015-11-17 27 views
9

ho creato una pagina personalizzata SonataAggiungere personalizzato percorso pagina Sonata per la barra di navigazione

percorso semplice

medapp_adminStreamCommands: 
    path:  /admin/stream 
    defaults: { _controller: MedAppBundle:VideoChat/VideoChat:adminStreamCommands } 

controller che restituisce il pool di amministrazione

public function adminStreamCommandsAction(Request $request) 
    { 

     return $this->render('@MedApp/AdminSonata/Stream/stream_commands.html.twig', array(
      'admin_pool' => $this->get('sonata.admin.pool'))); 
    } 

vista Plain modello

{% extends '@MedApp/AdminSonata/standard_layout.html.twig' %} 

{% block content %} 
foobar 
{% endblock content 

Questo funziona, I c un accesso sul mio sito web con /admin/foo e ottengo una pagina che ha il modello di amministratore Sonata con il mio contenuto 'foobar'.

La mia domanda è, come posso aggiungere questo percorso a sinistra e la barra di navigazione in alto senza dover modificare il modello predefinito? Questo perché il menu a sinistra è reso da un menu KNP:

{% block side_bar_nav %} 
    {% if app.user and is_granted('ROLE_SONATA_ADMIN') %} 
     {{ knp_menu_render('sonata_admin_sidebar', {template: admin_pool.getTemplate('knp_menu_template')}) }} 
    {% endif %} 
{% endblock side_bar_nav %} 

E io in qualche modo bisogno di aggiungere la mia nuova pagina da resi da questo menu.

Normalmente, una pagina viene aggiunto attraverso un servizio, ma questi sono costruiti sulla cima di un'entità:

servicename: 
    class: Bundle\Class 
    arguments: [~, Bundle\Entity\Entityname, ~] 
    tags: 
     - { name: sonata.admin, manager_type: orm, group: admin, label: CustomName} 

La mia pagina non utilizza un soggetto, però, solo il contenuto o il contenuto statico che non dipende su un'entità.

So già che posso modificare i blocchi che generano i menu, ma stavo pensando che il modo migliore sarebbe stato aggiungere la mia classe come servizio taggato come sonata.admin che non ha un tipo di manager orm, in altre parole, non è un'entità. Come può essere fatto?

risposta

1

Non penso sia possibile, devi creare un nuovo layout, copiare lo sonata admin layout e personalizzarlo secondo le tue necessità.

È possibile modificare il layout utilizzato modificando la configurazione yml per sonata_admin (modelli -> layout) o extending the SonataAdmin bundle e creando il proprio layout.html.twig.

+0

L'ho già fatto. Tuttavia, avrei bisogno di generare il menu in base sia al percorso del pool di amministratori che alle mie pagine personalizzate. Stavo pensando che la sonata abbia un modo di farlo attraverso il file yml o qualche altro modo più semplice piuttosto che farmi creare il mio menu personale. Immagino di non essere il primo a desiderare una funzionalità simile, ma non ho trovato nessun esempio che faccia questo. –

+0

Non so se c'è un altro modo di creare il tuo menu, potresti anche impostare i tuoi link controllando il percorso corrente della tua pagina e aggiungere il tuo html, che è un modo sporco per farlo ma funzionerà. – HypeR

+0

Infatti. Un altro modo sarebbe stato impostare una classe di amministrazione per un modello che non fosse un'entità legata all'ORM. Ho visto una discussione in questo modo ma, ancora una volta, non ho trovato alcun esempio su come farlo. Ciò funzionerebbe con certezza dato che posso aggiungere rotte alla raccolta temporanea del modello corrente e implementare azioni personalizzate. Sfortunatamente è qualcosa di cui non sono riuscito a trovare nulla o se è persino possibile. –

2

È necessario eseguire l'override di standard_layout e modificare il contenuto del blocco side_bar_nav. Questo è un modo semplice e veloce. Oppure puoi scavare nel codice sonata per scoprire come iniettare qualcosa in admin_pool.dashboardgroups - divertirti :)

+0

Lo so, questo è quello che ha detto l'altra risposta. Stavo cercando modi per utilizzare entità che non sono legate all'ORM. In questo modo posso definire i miei dati personalizzati per il pannello di amministrazione, ma il menu lo includerebbe comunque perché sarà un servizio con il tag sonata.admin. –