Skip to main content

Crear pagina de administración basada en links de menú

Tue, 28/09/2021 - 15:41
5
mins.
cover_crar_pagina_admin
Categoria
Tutorial

Motivación:

El problema que debía resolver consistía en crear una página de administración siguiendo la forma que Drupal utiliza para mostrar paginas como son admin/structure o admin/reports, es decir que refleje los links de un menú de administración.

reports

Como lo resolví:

Todo se resume a los archivos module_name.routing.yml y module_name.links.menu.yml definidos dentro de un modulo custom.

module

Empezemos por lo que necesitamos definir en el archivo de routing.

Este es mi informes.routing.yml

project_informes.admin:
  path: admin/project/informes
  defaults:
    _controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage'
    _title: 'Informes'
  requirements:
    _permission: 'generar informes'
project_informes.cultivos:
  path: admin/project/informes/cultivos
  defaults:
    _form: '\Drupal\project_informes\Form\InformeCultivoForm'
    _title: 'Generar Informe'
  requirements:
    _permission: 'access content'
project_informes.plagas:
  path: admin/project/informes/plagas
  defaults:
    _form: '\Drupal\project_informes\Form\InformePlagaForm'
    _title: 'Generar Informe de certificación'
  requirements:
    _permission: 'access content'
project_informes.inspeccion:
  path: admin/project/informes/inspeccion
  defaults:
    _form: '\Drupal\project_informes\Form\InformeInspeccionForm'
    _title: 'Generar Informe de inspeccion'
  requirements:
    _permission: 'access content'

Este archivo contiene las rutas definidas que llevan, en mi caso, a tres formularios y  una ruta project_informes.admin que define el path que será donde se muestre esta pagina de administración y llama a un controller (acá esta la magia)

_controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage'

Este controller pertenece al modulo system del core de drupal y es el que se ocupa de convertir los los links de un menú y mostrarlos de esa forma particular.

Y la pregunta que surge es ¿Y cuales son los links que se van a mostrar?

Acá es donde entra a jugar el otro archivo que mencioné al inicio, en mi caso, informes.links.menu.yml.

informes.admin:
  title: 'Informes'
  description: 'Admin informes'
  parent: project_core.admin
  route_name: project_informes.admin
  weight: 80
informes.cultivo:
  title: 'Cultivos'
  description: 'Informes fitosanitarios de cultivos.'
  parent: informes.admin
  route_name: project_informes.cultivos
  weight: 10
informes.plagas:
  title: 'Plagas'
  description: 'Informes fitosanitarios de plagas.'
  parent: informes.admin
  route_name: project_informes.plagas
  weight: 20
informes.inspeccion:
  title: 'Inspeccion'
  description: 'Informes para inspeccion.'
  parent: informes.admin
  route_name: project_informes.inspeccion
  weight: 30

Algo a tener en cuenta en la definición de este archivo es que se debe usar siempre la propiedad route_name para definir el destino o la referencia del link. Drupal permite también que se utilice la propiedad url para definir la referencia del link pero si queremos generar una pagina de administración si o si debemos usar la propiedad route_name.

Estos links de menú se ven de esta forma en el menú de administración.

menu

 

 

 

 

 

Ahora sí, ya tenemos todo definido, los links del menu que son hijos de Informes y la ruta project_informes.admin que llama al controller SystemController::systemAdminMenuBlockPage.

Entonces accedemos al path admin/project/informes y vamos a encontrar la página de administración

pagina_admin_informe