2012-07-14 11 views
10

Sto utilizzando per la gestione delle entità nella mia applicazione. Gli amministratori del sito possono aggiungere video e alcuni di loro devono prima essere approvati dai loro oratori. Esiste già un sistema di autorizzazione che funziona già: ho un codice funzionante che genererà un link speciale e informerà l'oratore, che può approvare o disapprovare il video, e notificare automaticamente gli amministratori.Amministratore sonata: Aggiungi trigger/azioni personalizzati per elencare/modificare l'azione

mi piacerebbe personalizzare la mia sezione di amministrazione, quindi ci sarà un pulsante ask for authorization accanto ai video. Sto bene averlo nella lista azione (/admin/acme/videos/list) o nell'azione di modifica da qualche parte nel right-nav (/admin/acme/videos/x/edit/)

Qual è l'approccio migliore per fare questo? La documentazione dice molto poco sulla personalizzazione dei blocchi, ma ho trovato this example che potrebbe essere la cosa che sto cercando, ma non riuscivo a capire come usarlo.

Un'opzione è utilizzare il gancio preUpdate e aggiungere una casella di controllo all'azione di modifica, ma un pulsante sarebbe molto più bello.

risposta

26

Per aggiungere un'azione per modulo di modifica

Aggiungi alla tua classe admin:

protected function configureSideMenu(MenuItemInterface $menu, $action, Admin $childAdmin = null) 
{ 
    if (!$childAdmin && !in_array($action, array('edit'))) { 
     return; 
    } 
    $admin = $this->isChild() ? $this->getParent() : $this; 
    $id = $admin->getRequest()->get('id'); 
    $menu->addChild('My action', array('uri' => 'http://google.com?id=' . $id)); 
} 

Si creerà menu a sinistra per azioni come/admin/Acme/video/x/modificare /. Avere l'id per l'elemento corrente ti consente di creare qualsiasi URL personalizzato.

Per aggiungere un'azione per la lista: Nel file di amministrazione aggiungere

protected function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper 
     ->add('_action', 'actions', array(
      'actions' => array(
       'act' => array('template' => 'AcmeBundle:Video:my_temp.html.twig'), 
      ) 
     )) 
    ; 
} 

Si aggiungerà una colonna con i collegamenti, allora avete bisogno di creare un modello per la colonna, qualcosa come

<a href="{{ admin.generateObjectUrl('delete', object) }}" class="delete_link" title="{% trans from 'SonataAdminBundle' %}action_delete{% endtrans %}"> 
    <img src="{{ asset('bundles/sonataadmin/famfamfam/delete.png') }}" alt="{% trans from 'SonataAdminBundle' %}action_delete{% endtrans %}" /> 
</a> 

Tutti gli esempi sono presi dal link che hai fornito. Spero che aiuti

+0

'configureSideMenu' è deprecato. Usa invece 'configureTabMenu'. – sergekv

Problemi correlati