Flag

Crea campos de alternancia booleanos personalizados (flags) que los usuarios pueden adjuntar a cualquier tipo de Entity, habilitando funciones como marcadores, favoritos, reportes de spam o cualquier marcador de contenido impulsado por usuarios.

flag
30,754 sites
184
drupal.org

Install

Drupal 11, 10 v5.0.3
composer require 'drupal/flag:^5.0'

Overview

El módulo Flag permite a los administradores del sitio definir campos de alternancia booleanos flexibles (llamados 'flags') que pueden adjuntarse a cualquier tipo de Entity de Drupal, incluyendo Nodes, comentarios, usuarios o tipos de Entity personalizados. Los usuarios con los permisos apropiados pueden marcar o desmarcar contenido, creando un ecosistema rico para la organización e interacción de contenido impulsada por usuarios.

Por defecto, los flags operan por usuario, lo que significa que cada usuario autenticado mantiene su propio conjunto de contenido marcado. Esto permite funciones personales como marcadores, favoritos o listas de seguimiento. Además, los flags pueden configurarse como 'globales', donde el estado del flag se comparte entre todos los usuarios, útil para funciones como marcar contenido como destacado u ofensivo.

El módulo proporciona integración completa con Views para mostrar y filtrar contenido marcado, una arquitectura basada en plugins para extensibilidad, hooks orientados a eventos para reacciones personalizadas a las acciones de marcado, y soporte para marcado de usuarios anónimos mediante seguimiento de sesión. Flag también incluye soporte de migración desde Drupal 6 y 7, facilitando la actualización de configuraciones de flag existentes.

Features

  • Crear flags personalizados ilimitados con etiquetas, texto y comportamiento configurables para cualquier tipo de Entity (Nodes, comentarios, usuarios, Entities personalizadas)
  • Marcado por usuario (marcadores personales, favoritos) o marcado global (compartido entre todos los usuarios para funciones editoriales)
  • Múltiples tipos de enlace: alternancia instantánea con AJAX, formularios de confirmación, formularios de entrada de Field con Fields personalizados, o recarga de página
  • Mostrar flags como pseudo-fields en modos de visualización de Entity, como casillas de verificación en formularios de edición de Entity, o en menús contextuales
  • Integración completa con Views con relaciones, filtros, ordenamientos y Fields para construir listas de contenido marcado
  • Sistema de permisos dinámico que genera permisos de marcar/desmarcar para cada flag, con permisos opcionales basados en propietario
  • Arquitectura orientada a eventos que despacha eventos cuando las Entities son marcadas o desmarcadas para integraciones personalizadas
  • Funciones de plantilla Twig (flagcount, flaglink) para renderizar enlaces de flag y conteos en plantillas personalizadas
  • Soporte de marcado para usuarios anónimos con seguimiento basado en sesión
  • Integración de plugins de Action para operaciones masivas de marcar/desmarcar vía Views Bulk Operations
  • Soporte completo de tokens para uso en Rules, correos automatizados y otros módulos compatibles con tokens
  • Soporte de migración desde los módulos Flag de Drupal 6 y 7

Use Cases

Marcadores personales

Permite a los usuarios marcar contenido para leerlo más tarde. Crea un flag por usuario llamado 'bookmark' para nodes, usa el tipo de enlace AJAX para retroalimentación instantánea. Construye una View filtrada por los marcadores del usuario actual para crear una página 'Mis marcadores'.

Contenido favorito

Habilita un sistema de favoritos donde los usuarios pueden marcar sus artículos, productos o medios preferidos. Usa el submódulo flag count para mostrar indicadores de popularidad que muestren cuántos usuarios han marcado cada elemento como favorito.

Reporte de spam/abuso

Crea un flag 'Reportar como spam' que permita a los usuarios marcar contenido inapropiado. Configúralo con el tipo de enlace de formulario de confirmación para prevenir reportes accidentales. Usa Views para crear un informe de administración que muestre el contenido marcado ordenado por cantidad de flags para moderación.

Contenido destacado editorial

Usa un flag global llamado 'featured' para marcar contenido para destacar en la página principal. Al ser global, cualquier editor puede establecerlo y el estado es compartido. Filtra Views por este flag para poblar dinámicamente las secciones de contenido destacado.

Sistema de seguimiento de usuarios

Habilita el submódulo flag_follower o crea un flag de usuario personalizado para seguimiento social. Los usuarios pueden seguir a otros usuarios, y Views puede mostrar listas de 'Seguidores' y 'Siguiendo' en los perfiles de usuario.

Funcionalidad de lista de deseos

Para sitios de comercio electrónico, crea un flag 'wishlist' para tipos de contenido de productos. Usa el tipo de enlace de entrada de campo para permitir a los usuarios agregar notas o cantidades al añadir a la lista de deseos. Muestra la lista de deseos mediante Views con capacidades de edición/eliminación.

Suscripciones a contenido

Crea un flag 'subscribe' para permitir a los usuarios suscribirse a contenido para notificaciones. Conéctate al evento flag.entity_flagged para activar notificaciones por correo electrónico cuando el contenido suscrito se actualice.

Marcador de posición para votación/calificación

Aunque Flag en sí es booleano, puede servir como base para sistemas de votación simples. Crea flags de 'upvote' y 'downvote' y usa los conteos de flags para calcular puntuaciones en Views o código personalizado.

Tips

  • Usa el submódulo flag_bookmark como implementación de referencia al crear tus propios flags
  • Para sitios de alto tráfico, considera las implicaciones de caché - la visualización de enlaces contextuales deshabilita el caché de Entity para usuarios con acceso a flag
  • Agrega campos personalizados a los flaggings mediante Field UI en /admin/structure/flags/manage/[flag]/fields para recopilar datos adicionales como notas o calificaciones
  • Usa las funciones Twig flagcount() y flaglink() en plantillas personalizadas para visualización flexible de flags
  • Suscríbete a los eventos flag.entity_flagged y flag.entity_unflagged para integraciones personalizadas como notificaciones o estadísticas
  • Prueba exhaustivamente el marcado anónimo ya que depende del manejo de sesiones PHP que varía según el entorno de hosting
  • Usa sugerencias de plantilla (flag--[flag_id].html.twig) para personalizar la apariencia de flags específicos

Technical Details

Admin Pages 7
Flags /admin/structure/flags

Lista todas las flags configuradas en el sitio. Desde aquí los administradores pueden ver, editar, habilitar, deshabilitar, restablecer o eliminar flags. La lista muestra el nombre de la flag, el tipo de flag (tipo de entidad al que se aplica), los bundles a los que se aplica, el estado global y las operaciones disponibles.

Añadir flag /admin/structure/flags/add

Primer paso de la creación de flag: seleccionar el tipo de entidad al que se adjuntará esta flag. Después de seleccionar, continuar al formulario completo de configuración de flag.

Añadir flag /admin/structure/flags/add/{entity_type}

Formulario completo de configuración de flag para crear una nueva flag. Configurar todos los aspectos de la flag incluyendo identificación, alcance, mensajes, control de acceso y opciones de visualización.

Editar Flag /admin/structure/flags/manage/{flag}

Modificar la configuración de una flag existente. Todas las opciones del formulario de añadir están disponibles para edición.

Restablecer Flag /admin/structure/flags/manage/{flag}/reset

Eliminar todos los marcados para esta flag. Esto elimina permanentemente todos los datos de marcado de usuarios asociados con esta flag.

Habilitar Flag /admin/structure/flags/manage/{flag}/enable

Volver a habilitar una flag previamente deshabilitada, haciéndola activa en el sitio nuevamente.

Deshabilitar Flag /admin/structure/flags/manage/{flag}/disable

Deshabilitar temporalmente una flag sin eliminarla. Las flags deshabilitadas no se muestran a los usuarios.

Permissions 8
Administrar Flags

Definir y gestionar Flags y configuraciones de Flag. Permiso de acceso restringido.

Administrar Flaggings

Eliminar flaggings de todos los usuarios. Permiso de acceso restringido.

Marcar [flag_name]

Permiso para marcar contenido con este flag específico. Generado dinámicamente para cada flag.

Desmarcar [flag_name]

Permiso para desmarcar contenido con este flag específico. Generado dinámicamente para cada flag.

Marcar [flag_name] elementos propios

Permiso para marcar contenido propio del usuario actual (opcional, requiere permisos adicionales habilitados).

Desmarcar [flag_name] elementos propios

Permiso para desmarcar contenido propio del usuario actual (opcional, requiere permisos adicionales habilitados).

Marcar [flag_name] elementos de otros

Permiso para marcar contenido de otros usuarios (opcional, requiere permisos adicionales habilitados).

Desmarcar [flag_name] elementos de otros

Permiso para desmarcar contenido de otros usuarios (opcional, requiere permisos adicionales habilitados).

Hooks 4
hook_flag_type_info_alter

Modifica las definiciones de plugins de tipo de flag proporcionadas por otros módulos. Puede colocarse en un archivo MODULE.flag.inc.

hook_flag_options_alter

Modifica las opciones predeterminadas de un flag. Se usa para agregar opciones personalizadas que se guardarán con la configuración del flag.

hook_flag_link_type_info_alter

Modifica las definiciones de plugins de tipo de enlace de acción. Puede colocarse en un archivo MODULE.flag.inc.

hook_flag_action_access

Realiza verificaciones de acceso personalizadas cuando se intenta una acción de flag. Devuelve objetos AccessResult para permitir, denegar o permanecer neutral.

Troubleshooting 6
Los enlaces de flag no aparecen en el contenido

Verifica que el flag esté habilitado, que el usuario tenga el permiso 'flag [flag_id]', que el flag aplique al bundle del contenido y que las opciones de visualización (mostrar como campo, mostrar en enlaces) estén configuradas. Revisa la configuración de Manage Display si usas visualización de campo.

Los enlaces de flag AJAX no funcionan

Asegúrate de que JavaScript esté habilitado, verifica errores de JS en la consola del navegador, confirma que la biblioteca flag/flag.link_ajax se esté cargando. Intenta limpiar la caché de Drupal y la caché del navegador.

Los usuarios anónimos no pueden marcar contenido

El marcado anónimo requiere seguimiento basado en sesión. Asegúrate de que las sesiones PHP funcionen correctamente. Verifica que el rol anónimo tenga el permiso de flag. Ten en cuenta que el caché de página puede interferir con el marcado anónimo.

Los conteos de flag no se actualizan

Los conteos de flag son mantenidos por el suscriptor de eventos FlagCountManager. Limpia las cachés y verifica que el sistema de eventos esté funcionando. Revisa la tabla de base de datos 'flag_counts' para verificar la integridad de los datos.

La relación de Views no muestra los flags

Asegúrate de haber agregado la relación de flag a tu View y configurarla para usar el flag correcto. Verifica que 'Include only flagged content' esté configurado apropiadamente para tu caso de uso.

El formulario de confirmación aparece en ubicación incorrecta

Para los tipos de enlace Confirm Form o Field Entry, revisa la configuración 'Form behavior'. Elige entre 'New page', 'Dialog' o 'Modal dialog' según tus necesidades.

Security Notes 5
  • Los permisos 'administer flags' y 'administer flaggings' están marcados como acceso restringido - otórgalos solo a administradores de confianza
  • Los permisos de flag se generan dinámicamente - revisa los permisos después de crear nuevos flags para asegurar el acceso apropiado
  • El marcado anónimo usa IDs de sesión que pueden ser manipulados - no lo uses para características críticas de seguridad
  • La protección CSRF se aplica a todas las rutas de flag/unflag
  • Al usar visualización de enlaces contextuales, el caché de Entity se deshabilita para usuarios con acceso a flag para prevenir que se muestren estados de flag en caché