Publish Content
Habilita permisos granulares de publicación y despublicación para tipos de contenido sin requerir el permiso 'administrar contenido'.
publishcontent
Install
composer require 'drupal/publishcontent:8.x-1.7'
composer require 'drupal/publishcontent:8.x-1.6'
Overview
El módulo Publish Content proporciona una solución ligera para gestionar flujos de trabajo de contenido al permitir un control granular sobre quién puede publicar y despublicar contenido. En lugar de otorgar a los usuarios el amplio permiso 'administrar contenido', los administradores del sitio pueden asignar permisos específicos de publicación/despublicación a múltiples niveles: globalmente para todo el contenido, para contenido que el usuario puede editar, por tipo de contenido, o para el contenido propio del usuario.
El módulo añade elementos de interfaz convenientes para la gestión de contenido: una pestaña Publicar/Despublicar (local task) en las páginas de nodos para cambiar el estado con un solo clic, y opcionalmente una casilla de verificación en el formulario de edición del nodo. También se integra con Views para proporcionar enlaces de publicar/despublicar en listados de contenido, lo que lo hace ideal para flujos de trabajo editoriales.
Para desarrolladores, el módulo proporciona una API robusta que incluye hooks para personalizar la lógica de acceso y eventos que se disparan cuando el contenido se publica o despublica, permitiendo la integración con otros sistemas de flujo de trabajo. El soporte multilingüe completo permite gestionar el estado de publicación de traducciones individuales.
Features
- Permisos globales para publicar o despublicar cualquier contenido independientemente del tipo de contenido
- Permisos para publicar o despublicar contenido al que el usuario tiene acceso de edición
- Permisos por tipo de contenido para control granular (ej. 'Article: publish any node type')
- Permisos para publicar o despublicar solo el contenido propio del usuario por tipo de contenido
- Pestaña local task Publicar/Despublicar configurable en páginas de visualización de nodos para cambios de estado con un clic
- Casilla de verificación opcional en formularios de edición de nodos para alternar el estado de publicación en línea
- Manejador de campo de Views que proporciona enlaces Publicar/Despublicar para vistas de administración de contenido
- Soporte multilingüe completo con gestión del estado de publicación por traducción
- Opción de creación automática de revisión al publicar/despublicar contenido
- Opción de registro para rastrear todas las acciones de publicar/despublicar en watchdog
- Etiquetas de texto personalizables para botones y estado de las acciones publicar/despublicar
- Hooks de API para desarrolladores (hook_publishcontent_publish_access, hook_publishcontent_unpublish_access) para lógica de acceso personalizada
- Eventos (PublishContentPublishEvent, PublishContentUnpublishEvent) que se disparan para integración con otros sistemas
Use Cases
Flujo de trabajo editorial para editores de contenido
Otorgue a los editores de contenido la capacidad de publicar y despublicar artículos que pueden editar, sin darles acceso administrativo completo. Use los permisos 'publicar contenido editable' y 'despublicar contenido editable'. Los editores pueden entonces usar la pestaña Publicar/Despublicar para alternar rápidamente el estado del contenido mientras revisan.
Auto-publicación de autores para tipos de contenido específicos
Permita a los autores publicar sus propias entradas de blog pero no otros tipos de contenido. Asigne el permiso 'Blog: publish own node type' al rol de autor. Los autores pueden publicar sus borradores cuando estén listos sin esperar revisión editorial.
Panel de moderación de contenido
Cree un panel de moderación de contenido basado en Views añadiendo el campo Publicar/Despublicar a una vista de contenido no publicado. Los moderadores pueden publicar rápidamente contenido aprobado directamente desde la lista sin abrir cada nodo.
Gestión de contenido multilingüe
En sitios multilingües, use el módulo para gestionar el estado de publicación por traducción. Los gestores de contenido pueden publicar la versión en inglés mientras mantienen la traducción alemana despublicada hasta que sea revisada.
Integración de flujo de trabajo personalizado
Suscríbase a PublishContentPublishEvent y PublishContentUnpublishEvent para integrar con flujos de trabajo personalizados. Por ejemplo, envíe notificaciones por correo electrónico cuando el contenido se publique, o actualice sistemas externos cuando el contenido se despublique.
Acceso de publicación condicional
Implemente hook_publishcontent_publish_access para añadir lógica de negocio personalizada. Por ejemplo, solo permita publicar artículos que tengan una imagen destacada, o prevenga despublicar contenido que actualmente está destacado en la página de inicio.
Tips
- Use 'publicar contenido editable' en lugar de 'publicar cualquier contenido' cuando sea posible para mejor seguridad - los usuarios solo pueden publicar contenido que pueden editar de todos modos.
- Habilite 'Crear nueva revisión al publicar/despublicar' para responsabilidad y mantener el historial del contenido.
- Habilite 'Crear una entrada de registro' para pistas de auditoría, especialmente en sitios con requisitos de cumplimiento.
- Combine con el módulo View Unpublished para crear un flujo de trabajo editorial completo donde los editores pueden ver, editar y publicar contenido no publicado.
- Use la integración de Views para crear paneles de contenido mostrando enlaces de publicación, reduciendo clics para flujos de trabajo editoriales.
- Implemente hooks de acceso para hacer cumplir reglas de negocio como requerir ciertos campos antes de publicar.
Technical Details
Admin Pages 1
/admin/config/workflow/publishcontent
Configura cómo los usuarios interactúan con la funcionalidad de publicar y despublicar, incluyendo preferencias de UI, opciones de responsabilidad y etiquetas de texto.
Permissions 11
Hooks 2
hook_publishcontent_publish_access
Permite a los módulos conceder o denegar acceso para publicar un nodo específico. Se llama después de que las verificaciones de permisos pasan, habilitando lógica de acceso personalizada basada en campos del nodo u otras condiciones.
hook_publishcontent_unpublish_access
Permite a los módulos conceder o denegar acceso para despublicar un nodo específico. Se llama después de que las verificaciones de permisos pasan, habilitando lógica de acceso personalizada basada en campos del nodo u otras condiciones.
Troubleshooting 5
Asegúrese de que la configuración 'Publicar y despublicar vía local task' esté habilitada en /admin/config/workflow/publishcontent. También verifique que el usuario tenga los permisos apropiados de publicar/despublicar para el tipo de contenido.
Este es el comportamiento esperado cuando 'Publicar y despublicar vía casilla de verificación' está habilitado pero el usuario carece de permisos de publicar/despublicar. Otorgue los permisos apropiados o deshabilite la opción de UI de casilla de verificación.
El módulo previene que usuarios sin permisos cambien el estado de publicación, y establece por defecto el nuevo contenido como despublicado cuando el usuario no puede publicar. Verifique que los permisos estén correctamente configurados.
Añada el campo 'Publicar/Despublicar' de la categoría Contenido a su Vista. Asegúrese de que la Vista esté mostrando contenido (nodos), no otros tipos de entidad.
Los eventos solo se disparan cuando se usan las rutas de toggle de Publish Content (/node/{node}/toggleStatus). Publicar vía el formulario de edición del nodo no dispara estos eventos. Use hook_entity_presave o hook_entity_update para cambios de publicación basados en formulario.
Security Notes 4
- El módulo no evade el sistema de acceso del core de Drupal - los usuarios aún deben tener acceso de edición donde se usan permisos 'editable'.
- La protección CSRF se aplica en todas las rutas de toggle de publicar/despublicar.
- Los permisos dinámicos se generan por tipo de contenido, permitiendo control detallado sobre qué roles pueden publicar qué tipos de contenido.
- Considere cuidadosamente antes de otorgar 'publicar cualquier contenido' o 'despublicar cualquier contenido' - estos son permisos poderosos que aplican a todos los tipos de contenido.