simple personal modern grav framework fastest fast cms content-management-system commenting

content-management-system - personal - portfolio cms



sistema de comentarios por párrafo (6)

Estoy muy interesado en la tendencia emergente de los sistemas de comentarios por párrafo (también llamados "sistemas de anotaciones"), como los implementados por medium.com y qz.com y estoy considerando la idea de desarrollar uno para mío.

Pregunta: parece que se implementan principalmente a través de javascript, que se ejecuta a través de los párrafos html del texto, identificados de forma única por un atributo id (o, en el caso de Medium, un nombre). ¿Significa que su CMS realmente almacena cada párrafo como una entrada separada en la base de datos? Me parece demasiado complejo, pero, de lo contrario, ¿cómo administran el hecho de que un párrafo se puede eliminar, editar o mover en el texto general? ¿Cómo se conservaría la identificación única si el autor cambia el párrafo? ¿Cómo se estructura lógicamente esa identificación única? (post_id + position_in_post)?

Gracias por sus ideas ...


(descargo de responsabilidad: soy un dev de factlink )

Trabajo para una empresa que intenta permitir comentarios por párrafo (o por frase) en sitios arbitrarios. Esencialmente, tienes dos opciones para identificar el ancla de un comentario.

  1. Recuerde la estructura de la página (por ejemplo, una ruta desde una raíz a un párrafo) y coloque los comentarios en la misma posición la próxima vez.
  2. Identifique el contenido del párrafo y coloque comentarios cerca de contenido idéntico o similar la próxima vez.

Ambos sistemas tienen sus inconvenientes, pero es necesario que opte por la opción 2 si desea un sistema robusto. La identificación estructural es frágil ante la estructura cambiante. Los cambios especialmente irrelevantes, como la tematización o las etiquetas html precisas utilizadas, pueden afectar significativamente la "ruta". Cuando eso sucede, realmente no puede arreglarlo, a menos que inspeccione el contenido, es decir, la opción (2).

Sam describe lo que se reduce a un contenido del lado del servidor en su respuesta . La coincidencia basada factlink contenido del lado del cliente es lo que factlink y la hypothesis (IIRC). La mayoría de los navegadores admiten búsquedas de subcadenas no estándar pero rápidas en el contenido de la página usando window.find o TextRange.findText . Alternativamente, puede caminar el DOM, que es más lento pero le da la flexibilidad para implementar (por ejemplo) una coincidencia aproximada.

Puede parecer que la coincidencia del lado del cliente es excesiva o compleja, pero en realidad es más simple: es una forma muy robusta de desvincular la administración de contenido de sus comentarios. Ninguno de los dos es realmente simple, por lo que disociar esas preocupaciones puede ser una victoria.


En caso de que alguien venga a buscar aquí, he implementado una funcionalidad similar a un medio como una aplicación Django. Es de código abierto y se puede encontrar como package en Pypi y en github .

Utilicé una de mis otras aplicaciones, blogging para asignar identificadores de párrafo únicos a cada objeto de contenido (actualmente solo estamos viendo las etiquetas <p> ) y utilizo metadatos internos adicionales en el backend mientras los almaceno en DB (MySQL actualmente , pero lo que hemos hecho es JSON ed Blob, este método es más apropiado para un DB orientado a documentos. El frontend está principalmente impulsado por jQuery con la API REST conecta el backend con el frontend.

Tomé señales de esta publicación, pero luego rechacé la creación de algún tipo de valor de resumen del párrafo porque el contenido puede cambiar. Lo que quería era preservar las anotaciones siempre que el párrafo no estuviera completamente sobreescrito. En el caso completo de sobrescritura, proporcioné la recopilación de las anotaciones en un contenedor huérfano.

Más en estos tutorials

Una versión heredada de la misma se está ejecutando en esas páginas de tutoriales, esa fue la primera revisión. (Pero no podrá publicar sin iniciar sesión, pero siempre puede iniciar sesión con cuentas sociales para verificarlo :-))


Había creado un violín en las mismas líneas para demostrar el poder de JQuery durante una sesión de entrenamiento.

http://fiddle.jshell.net/fotuzlab/Lwhu5/

Podría ayudar como punto de partida junto con las ideas detalladas y útiles de Sam. Obtiene el valor del campo de texto en la función Jquery, donde puede enviarlo a su CMS utilizando ajax / API.

PS: La función no está lista para producción. Es sólo un punto de partida. Un pequeño retoque lo hará utilizable.


Hay otro plugin de wordpress llamado "commentpress" que existe desde hace mucho tiempo. Utilizo una versión antigua de este plugin para mi blog y funciona muy bien.

Puede elegir comentar por líneas o por párrafos, ¡y la ergonomía está realmente pensando!

Una demostración aquí:
http://futureofthebook.org/
y todo el código está en github:
https://github.com/IFBook/commentpress-core

Después de echar un vistazo rápido al código, parece que usan el segundo enfoque como @Eamon Nerbonne explica en su respuesta . Analizan cada párrafo para hacer una firma basada en el primer carácter de cada palabra. Here está la función para hacer eso.


No puedo hablar con el lado medio, pero como uno de los desarrolladores de Quartz, puedo dar una idea de cómo funcionan las anotaciones de qz.com.

El código de anotaciones es un código php personalizado y es independiente del CMS para publicar artículos (wordpress VIP). De hecho, almacenamos una referencia a cada párrafo como una fila en la base de datos, para rastrear cualquier actualización del contenido del artículo. Llamamos a esto un hilo de anotación y cuando un usuario guarda una anotación, el ID de hilo se almacena junto con la anotación.

No tenemos una ID única almacenada en el lado de wordpress para cada párrafo, sino que almacenamos la posición relativa de los párrafos en ese artículo (nodeIndex "3" y nodeSelector "p" == la tercera etiqueta p en el cuerpo del contenido para un determinado Article) y el javascript determina dónde colocar exactamente el bloque de anotación. Tomamos esta ruta para evitar personalizaciones más pesadas en el lado de wordpress, aunque dependiendo de su CMS puede ser más fácil abordar esto directamente en el código del CMS y agregar identificaciones únicas en el html antes de enviar al cliente.

Cada vez que se publica una actualización de un artículo, cada párrafo del artículo actualizado se compara con lo que se almacenó previamente con los hilos de anotación de ese artículo. Si la posición y el texto del párrafo no coinciden, intentará encontrar el párrafo más cercano y actualizar la fila de ese hilo y se crearán y eliminarán nuevos hilos, según corresponda. Todo esto se maneja desde el lado del servidor cada vez que se publican cambios en un artículo.

Un par de implicaciones alternativas que también vale la pena observar son las anotaciones del texto Kinja de Gawker (actualmente en uso en Jalopnik) y las anotaciones palabra por palabra de rapgenius.com.


Recientemente publiqué una publicación sobre cómo hacer esto con la creación de WordPress en un complemento existente.

Al igual que qz.com, asigno identificadores de párrafos en el cliente y luego proporciono esa información a WordPress para que la almacene como meta de comentarios cuando se crea un nuevo comentario. Usé el hashing del texto del párrafo para crear el ID, lo que significa que el orden de los párrafos no es importante, pero sí significa que si se edita un párrafo, cualquier comentario asociado quedará huérfano.

Al principio, pensé que esto era un problema, pero pensándolo bien, si un lector comenta un párrafo, luego la edición de ese texto parece un poco engañosa.

El código está disponible de forma gratuita en GitHub si quieres forzarlo y mejorarlo.