2012-07-14 20 views
10

Estoy usando para administrar entidades en mi aplicación. Los administradores del sitio pueden agregar videos, y algunos de ellos primero deben ser aprobados por sus hablantes. Ya hay un sistema de autorización funcionando: tengo un código de trabajo que generará un enlace especial y notificará al hablante, quien puede aprobar o rechazar el video, y notificar a los administradores de manera automática.Sonata Admin: Agregue disparadores/acciones personalizados para enumerar/editar la acción

Me gustaría personalizar mi sección de administrador, por lo que habrá un botón ask for authorization junto a los videos. Estoy bien tenerlo ya sea en la acción de lista (/admin/acme/videos/list) o en la acción de edición en algún lugar de la derecha-nav (/admin/acme/videos/x/edit/)

¿Cuál es el mejor enfoque para hacer esto? La documentación dice muy poco acerca de la personalización de bloques, pero encontré this example que puede ser lo que estoy buscando, pero no pude encontrar la manera de usarlo.

Una opción es utilizar el gancho preUpdate y agregar una casilla de verificación a la acción de edición, pero un botón sería mucho más agradable.

Respuesta

26

Para añadir una acción de formulario de edición

Añadir a su clase de administración:

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)); 
} 

Se va a crear menú de la izquierda para acciones tales como/admin/Acme/videos/x/editar /. Tener una identificación para el elemento actual le permite construir cualquier URL personalizada.

Para agregar un recurso de la lista: En el archivo admin añadir

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

Se añadirá una columna con enlaces, entonces usted necesita para crear una plantilla para su columna, algo así como

<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> 

Todos los ejemplos están tomados del enlace que proporcionó. Espero que ayude

+0

'configureSideMenu' está en desuso. Use 'configureTabMenu' en su lugar. – sergekv

Cuestiones relacionadas