Voting API Widgets

Un sistema de votación flexible basado en campos construido sobre Voting API, que proporciona widgets de votación listos para usar, incluyendo calificaciones de cinco estrellas, botones de me gusta y votación de útil/no útil.

votingapi_widgets
1,129 sites
42
drupal.org

Overview

Voting API Widgets extiende el módulo Voting API proporcionando un sistema de votación basado en campos que puede añadirse fácilmente a cualquier entidad de contenido. El módulo ofrece tres tipos de widgets de votación integrados: un sistema de calificación de cinco estrellas con múltiples temas visuales, un simple botón de me gusta y un widget de útil/no útil con pulgares arriba/abajo.

El módulo aprovecha el sistema de campos de Drupal, permitiendo a los constructores de sitios añadir funcionalidad de votación a cualquier tipo de entidad a través de la interfaz estándar de configuración de campos. Cada campo de votación puede configurarse de forma independiente con diferentes tipos de voto, ventanas de renovación tanto para usuarios anónimos como autenticados, y varias opciones de visualización.

Todas las interacciones de votación se manejan mediante AJAX para una experiencia de usuario fluida sin recargas de página. El módulo proporciona control granular de permisos con permisos generados dinámicamente para cada instancia de campo de votación, permitiendo un control de acceso detallado sobre quién puede votar, editar sus votos, eliminar sus votos o gestionar el estado de la votación.

Los desarrolladores pueden extender el módulo creando plugins de widgets de votación personalizados usando PHP 8 Attributes o Doctrine Annotations. El sistema de plugins proporciona una arquitectura limpia para implementar nuevos estilos de votación con formularios, valores y lógica de visualización personalizados.

Features

  • Sistema de votación basado en campos que puede adjuntarse a cualquier entidad de contenido a través de la interfaz de campos de Drupal
  • Tres widgets de votación integrados: Calificación de cinco estrellas, botón Me gusta y votación Útil/No útil
  • El widget de cinco estrellas soporta 9 temas visuales diferentes incluyendo estrellas CSS, estrellas FontAwesome, estrellas Bootstrap y varios estilos de barra
  • Votación basada en AJAX para una interacción de usuario fluida sin recargas de página
  • Ventanas de renovación de votos configurables para controlar con qué frecuencia los usuarios pueden cambiar sus votos (desde inmediato hasta nunca)
  • Configuraciones de renovación separadas para usuarios anónimos y autenticados
  • Generación dinámica de permisos por instancia de campo para votar, editar votos, eliminar votos y gestionar el estado de la votación
  • Carga diferida de formularios de votación usando #lazy_builder de Drupal para un rendimiento óptimo
  • Funciones de resultado de voto personalizadas para calcular promedios, conteos y calificaciones de utilidad específicas del campo
  • Sistema de plugins extensible para crear widgets de votación personalizados usando PHP 8 Attributes
  • Sugerencias de tema para plantillas de resumen de votos que permiten sobreescrituras específicas por widget y por entidad
  • Soporte para mostrar resumen de resultados junto al widget de votación
  • Opción para mostrar el voto propio del usuario o resultados agregados

Use Cases

Sistema de calificación de artículos

Añadir un campo de calificación de cinco estrellas a los artículos permitiendo a los lectores calificar la calidad del contenido. Configurar el formateador para mostrar el resumen de resultados y usar el tema 'fontawesome-stars' para una apariencia pulida. Otorgar permiso a usuarios anónimos para votar y maximizar la participación.

Función social de Me gusta

Implementar botones de me gusta al estilo de Facebook en publicaciones de blog o comentarios. Añadir un voting_api_field con el plugin 'like' a su tipo de contenido. El conteo de me gusta se muestra junto al botón, proporcionando prueba social y métricas de participación.

Retroalimentación de artículos de ayuda

Añadir una función '¿Fue esto útil?' a páginas de documentación o FAQ usando el widget 'useful'. Los usuarios pueden votar pulgar arriba o abajo, y los resultados agregados ayudan a identificar contenido que necesita mejoras.

Reseñas de productos

Crear un sistema de reseñas de productos con calificaciones de cinco estrellas. Usar la opción 'show_results' del formateador para mostrar calificaciones promedio y conteos de votos. Configurar user_window a 'Nunca' para asegurar que cada usuario solo pueda calificar un producto una vez.

Votación de comentarios

Añadir votación a comentarios para permitir moderación comunitaria. Los usuarios pueden votar positivamente comentarios útiles o negativamente los no útiles usando el widget useful, similar a Stack Overflow o Reddit.

Contenido tipo encuesta

Crear encuestas ligeras añadiendo un campo de votación a un tipo de contenido. El estado de votación puede alternarse entre abierto/cerrado para controlar cuándo la votación está activa, útil para eventos de votación con tiempo limitado.

Tips

  • Usar sugerencias de tema para personalizar plantillas de resumen de votos por tipo de widget o tipo de contenido. Las plantillas siguen el patrón: votingapi-widgets-summary--[plugin]--[entity_type]--[bundle]--[field_name].html.twig
  • Para sitios de alto tráfico, la función de carga diferida (#lazy_builder) ayuda a mejorar el rendimiento de carga de página al diferir el renderizado del formulario de votación
  • La configuración 'show_own_vote' del formateador es útil en formularios de edición donde quiere que los usuarios vean y modifiquen su voto existente
  • Al crear widgets de votación personalizados, extender VotingApiWidgetBase e implementar VotingApiWidgetInterface. Usar PHP 8 Attributes para las definiciones de plugins.
  • Las configuraciones de renovación de votos heredan de la configuración global de Voting API cuando se establecen a 'Votingapi default'. Configurar valores predeterminados del sitio en /admin/config/search/votingapi.
  • El módulo añade un campo base 'field_name' a la entidad Vote, permitiendo que los votos se asocien con campos específicos en lugar de solo tipos de entidad.

Technical Details

Permissions 4
Votar en tipo [entity_type] del bundle [bundle] en el campo [field_name]

Permiso generado dinámicamente que permite a los usuarios emitir votos en el campo de votación especificado. Se crea un permiso para cada instancia de voting_api_field.

Editar voto en tipo [entity_type] del bundle [bundle] en el campo [field_name]

Permiso generado dinámicamente que permite a los usuarios modificar sus votos previamente emitidos en el campo de votación especificado.

Eliminar voto en tipo [entity_type] del bundle [bundle] en el campo [field_name]

Permiso generado dinámicamente que permite a los usuarios eliminar sus votos previamente emitidos del campo de votación especificado.

Abrir o cerrar votación en tipo [entity_type] del bundle [bundle] en el campo [field_name]

Permiso generado dinámicamente que permite a los usuarios abrir o cerrar la votación en elementos de contenido específicos para el campo de votación especificado.

Hooks 1
hook_votingapi_widgets_voting_api_widget_info_alter

Permite a los módulos alterar las definiciones de plugins de widgets de votación.

Troubleshooting 6
Error de biblioteca jQuery Bar Rating no encontrada en la página de estado

Descargar la biblioteca jQuery Bar Rating desde GitHub (https://github.com/antennaio/jquery-bar-rating) y colocarla en el directorio /libraries/jquery-bar-rating/. El archivo jquery.barrating.min.js debe estar en /libraries/jquery-bar-rating/dist/jquery.barrating.min.js.

El widget de cinco estrellas no se muestra correctamente

Asegurarse de que la biblioteca jQuery Bar Rating esté correctamente instalada y que los archivos de tema CSS sean accesibles. Revisar la consola del navegador en busca de errores de JavaScript. Limpiar las cachés de Drupal después de instalar la biblioteca.

Los usuarios anónimos no pueden votar

Verificar que se hayan otorgado los permisos. Ir a Personas > Permisos y buscar el permiso 'Vote on type [entity_type] from bundle [bundle] in field [field_name]'. Otorgar este al rol de anónimo.

Los usuarios pueden votar múltiples veces

Verificar la configuración de la ventana de renovación de votos en la configuración del campo. Establecer 'Renovación de voto anónimo' y 'Renovación de voto de usuario registrado' a 'Nunca' o un intervalo de tiempo apropiado para prevenir votación duplicada.

No se puede desinstalar el módulo

Todas las instancias de voting_api_field deben eliminarse antes de que el módulo pueda desinstalarse. Ir a la página de Administrar campos de cada tipo de contenido y eliminar primero cualquier campo de votación.

Los resultados de votos no se actualizan después de votar

Los resultados de votación se almacenan en caché para mejorar el rendimiento. Intentar limpiar la caché de Drupal. Si usa Views para mostrar resultados, asegurarse de que la View no esté en caché o tenga configuraciones de caché apropiadas.

Security Notes 4
  • Los permisos se generan dinámicamente por instancia de campo, proporcionando control de acceso granular. Siempre revisar los permisos después de añadir nuevos campos de votación.
  • La votación anónima usa identificación basada en IP que puede ser eludida. Para votaciones críticas, considerar requerir autenticación.
  • La ventana de renovación de votos ayuda a prevenir la manipulación de votos pero usuarios determinados aún pueden encontrar formas de enviar múltiples votos.
  • Los callbacks AJAX validan los permisos de votación del lado del servidor, previniendo votos no autorizados incluso si se eluden las restricciones del lado del cliente.