Trash
Proporciona funcionalidad de eliminación suave (papelera de reciclaje) para entidades de contenido de Drupal, permitiendo restaurar el contenido eliminado en lugar de eliminarlo permanentemente.
trash
Install
composer require 'drupal/trash:^3.0'
Overview
El módulo Trash implementa un mecanismo de "eliminación suave" para entidades de contenido de Drupal. Cuando los usuarios eliminan contenido, en lugar de ser eliminado permanentemente, las entidades se marcan con una marca de tiempo de eliminación y se ocultan de la operación normal del sitio. Esto permite recuperar el contenido desde una interfaz centralizada de papelera de reciclaje.
El módulo funciona generando dinámicamente clases de almacenamiento personalizadas para los tipos de entidad habilitados que interceptan la operación de eliminación. Cuando una entidad es "eliminada", establece un campo de marca de tiempo interno en lugar de eliminar realmente la entidad de la base de datos. Las entidades en la papelera se ocultan de las consultas de entidades, Views y el acceso directo a través de hooks de acceso a entidades.
Trash soporta la purga automática de contenido antiguo en la papelera después de un período de tiempo configurable, manejadores específicos por tipo de entidad para comportamientos especiales e integración con el módulo Workspaces de Drupal. El módulo proporciona tanto una interfaz web para gestionar el contenido en la papelera como comandos Drush para operaciones masivas.
Features
- Funcionalidad de eliminación suave para cualquier tipo de entidad de contenido basado en SQL
- Interfaz de administración centralizada de papelera en /admin/content/trash para ver y gestionar contenido eliminado
- Restaurar entidades eliminadas a su estado original con todos los datos intactos
- Purgar (eliminar) permanentemente entidades de la papelera cuando ya no se necesiten
- Funcionalidad de purga automática configurable para eliminar automáticamente contenido de la papelera después de un período de tiempo especificado (ej. 30 días)
- Configuración por tipo de entidad y por bundle para habilitar la funcionalidad de papelera
- Generación dinámica de clases de almacenamiento usando plantillas Twig para interceptar operaciones de eliminación
- Alteración de consultas de entidades y Views para ocultar entidades de la papelera en listados normales
- Control de acceso a entidades para prevenir la visualización no autorizada de contenido en la papelera
- Integración con Workspaces para manejar entidades en la papelera en contextos de workspace
- Integración con Search API para excluir entidades de la papelera de los índices de búsqueda
- Integración con alias de ruta para enviar automáticamente a la papelera y restaurar alias de URL asociados
- Manejador de contenido de enlaces de menú para gestión adecuada del árbol de menú
- Comandos Drush para operaciones masivas de restauración y purga
- Sistema extensible de manejadores de papelera para comportamientos específicos por tipo de entidad
- Tres contextos de papelera: activo (operación normal), inactivo (trabajando con la papelera), ignorar (omitir la papelera)
Use Cases
Recuperar contenido eliminado accidentalmente
Un editor de contenido elimina accidentalmente un artículo importante. En lugar de perderse permanentemente, el artículo es movido a la papelera. Un administrador navega a Administración > Contenido > Trash, encuentra el artículo en la lista y hace clic en 'Restaurar' para recuperarlo con todos sus datos, revisiones y alias de URL intactos.
Limpieza programada de contenido
Un sitio de noticias grande genera cientos de artículos diariamente. Configure la purga automática para eliminar automáticamente el contenido de la papelera después de 30 días. Los editores pueden eliminar contenido desactualizado sabiendo que estará disponible para recuperación durante un mes, pero no se acumulará indefinidamente. Ejecute 'drush trash:purge --all' para limpieza masiva inmediata si es necesario.
Gestión de papelera multi-tipo de entidad
Un sitio usa nodos, entidades de media y entidades de contenido personalizadas. Habilite la papelera para todos los tipos de entidad relevantes. La papelera proporciona una interfaz unificada con pestañas para cada tipo de entidad, permitiendo a los gestores de contenido revisar y gestionar todo el contenido eliminado desde una única ubicación.
Eliminación de contenido con reconocimiento de workspace
El contenido está siendo editado en un workspace antes de publicarse. Cuando el contenido es enviado a la papelera en el workspace, permanece visible en Live hasta que el workspace sea publicado. Después de la publicación, el estado de papelera se propaga a Live, y los enlaces de menú asociados son limpiados correctamente.
Operaciones masivas vía Drush
Un desarrollador necesita limpiar contenido de prueba de un entorno de staging. Use 'drush trash:purge node' para eliminar permanentemente todos los nodos en la papelera, o 'drush trash:restore --all' para recuperar todo el contenido de la papelera en todos los tipos de entidad después de un despliegue problemático.
Configuración de papelera específica por bundle
Un sitio tiene tipos de contenido Article y Page, pero solo quiere funcionalidad de papelera para Articles (las páginas raramente se eliminan). Configure la papelera para habilitar solo el bundle Article para nodos, dejando las Pages para ser eliminadas normalmente sin pasar por la papelera.
Tips
- Use el parámetro de consulta '?in_trash=true' en URLs canónicas de entidades para ver entidades en la papelera directamente (requiere permisos apropiados)
- El contexto de papelera puede ser cambiado temporalmente usando \Drupal::service('trash.manager')->executeInTrashContext('ignore', function() { ... }) para operaciones que necesitan acceder a todas las entidades sin importar el estado de papelera
- Trash crea nuevas revisiones cuando las entidades son enviadas a la papelera y restauradas, manteniendo un historial de revisiones completo
- La columna 'Eliminado por' en el listado de la papelera muestra quién eliminó la entidad (para entidades revisionables)
- Considere habilitar 'Vista compacta' si tiene muchos tipos de entidad habilitados para simplificar la interfaz de la papelera
- Las consultas de entidades pueden usar ->addMetaData('trash', 'inactive') para consultar explícitamente entidades en la papelera
- Los manejadores de papelera personalizados pueden ser creados implementando TrashHandlerInterface y etiquetando el servicio con 'trash_handler'
Technical Details
Admin Pages 2
/admin/config/content/trash
Configurar qué tipos de entidad pueden usar la papelera y establecer la purga automática de contenido antiguo.
/admin/content/trash
Ver y gestionar todas las entidades de contenido en la papelera (eliminadas suavemente). Lista elementos eliminados con opciones para restaurar o purgar permanentemente.
Permissions 5
Hooks 8
hook_entity_pre_trash_delete
Actuar antes de que una entidad sea eliminada suavemente (movida a la papelera).
hook_ENTITY_TYPE_pre_trash_delete
Actuar antes de que un tipo de entidad específico sea eliminado suavemente.
hook_entity_trash_delete
Responder después de que una entidad haya sido eliminada suavemente (movida a la papelera).
hook_ENTITY_TYPE_trash_delete
Responder después de que un tipo de entidad específico haya sido eliminado suavemente.
hook_entity_pre_trash_restore
Actuar antes de que una entidad sea restaurada de la papelera.
hook_ENTITY_TYPE_pre_trash_restore
Actuar antes de que un tipo de entidad específico sea restaurado de la papelera.
hook_entity_trash_restore
Responder después de que una entidad haya sido restaurada de la papelera.
hook_ENTITY_TYPE_trash_restore
Responder después de que un tipo de entidad específico haya sido restaurado de la papelera.
Drush Commands 2
drush trash:restore [entity_type_id] [entity_ids]
Restaura entidades de la papelera de vuelta a estado activo.
drush trash:purge [entity_type_id] [entity_ids]
Elimina permanentemente entidades de la papelera del sistema.
Troubleshooting 6
Verifique que la papelera esté habilitada para el tipo de entidad y bundle específico en la configuración de Trash (/admin/config/content/trash). También verifique que el tipo de entidad use almacenamiento basado en SQL.
Asegúrese de que las Views no estén consultando explícitamente el campo 'deleted'. El módulo Trash altera automáticamente las consultas, pero condiciones personalizadas en el campo deleted omitirán esto. Verifique si el contexto de papelera ha sido establecido a 'ignore' en algún lugar del código personalizado.
Para alias de ruta, esto ocurre cuando otro alias con la misma ruta ya existe. Elimine o modifique el alias en conflicto primero. Para otros tipos de entidad, verifique la validación específica de entidad en los manejadores de papelera.
Verifique que cron esté ejecutándose correctamente y que la purga automática esté habilitada en la configuración. Verifique que el valor de auto_purge.after sea una expresión de tiempo válida (ej. '30 days'). Revise los logs de Drupal para cualquier error de procesamiento de cola.
Si tiene una clase de almacenamiento personalizada, asegúrese de que sea compatible con los métodos de TrashStorageTrait. Trash genera dinámicamente clases que extienden su clase de almacenamiento. Considere extender desde la clase generada por Trash en su lugar.
Verifique que el almacenamiento PHP sea escribible. Trash usa PhpStorageFactory para guardar las clases generadas. Limpie las cachés y verifique los permisos de archivo en el directorio de almacenamiento PHP generado.
Security Notes 4
- El permiso 'view deleted entities' debe ser otorgado cuidadosamente ya que permite ver contenido que fue intencionalmente removido del acceso público
- El permiso 'purge' elimina datos permanentemente sin opción de recuperación - asignar solo a roles de confianza
- La purga automática se ejecuta vía cron y elimina datos permanentemente - asegúrese de que el período de retención sea apropiado para sus requisitos de cumplimiento
- Las entidades en la papelera son excluidas de los resultados de búsqueda y consultas normales, pero los datos permanecen en la base de datos hasta que sean purgados