html - tablas - ¿Cómo debo manejar la vinculación automática en el contenido de la página wiki?
moodle wiki individual (6)
Lo que quiero decir con autolinking es el proceso mediante el cual los enlaces wiki integrados en el contenido de la página se generan en un hipervínculo a la página (si existe) o en un enlace de creación (si la página no existe).
Con el analizador que estoy usando, este es un proceso de dos pasos: primero, se analiza el contenido de la página y se extraen todos los enlaces a las páginas wiki de la marca de origen. Luego, vuelvo a alimentar una matriz de las páginas existentes al analizador, antes de que se genere el marcado HTML final.
¿Cuál es la mejor manera de manejar este proceso? Parece como si tuviera que mantener una lista en caché de cada página en el sitio, en lugar de tener que extraer el índice de títulos de página cada vez. ¿O es mejor verificar cada enlace por separado para ver si existe? Esto podría dar como resultado una gran cantidad de búsquedas en la base de datos si la lista no estaba en la memoria caché. ¿Sería esto viable para un sitio wiki más grande con miles de páginas?
En mi propia wiki, reviso todos los enlaces (sin almacenamiento en caché), pero mi wiki solo es utilizado internamente por algunas personas. Deberías comparar cosas como esta.
En mi propio sistema wiki, mi sistema de caché es bastante simple: cuando la página se actualiza, comprueba los enlaces para asegurarse de que sean válidos y aplica el formato / ubicación correctos para los que no lo son. La página en caché se guarda como una página HTML en mi raíz de caché.
Las páginas que están marcadas como ''no creadas'' durante la actualización de la página se insertan en la tabla de la base de datos que contiene la página y luego en un csv de páginas que se vinculan a ella.
Cuando alguien crea esa página, inicia un escaneo para mirar a través de cada página de enlace y vuelve a guardar en caché la página de enlace con el enlace y el formato correctos.
Si no estaba interesado en resaltar páginas no creadas, podría simplemente tener un comprobador para ver si la página se creó cuando intenta acceder a ella, y si no lo hace, redireccionar a la página de creación. Luego, simplemente haga un enlace a las páginas como es normal en otros artículos.
Mi idea sería consultar los títulos como SELECT title FROM articles
y simplemente verificar si cada wikilink está en ese conjunto de cadenas. Si es tu enlace a la página, si no, lo vinculas a la página de creación.
¡Intenté hacer esto una vez y fue una pesadilla! Mi solución fue un asqueroso ciclo en un procedimiento de SQL, y no lo recomiendo.
Una cosa que me dio problemas fue decidir qué enlace usar en una frase de varias palabras. Digamos que tienes un texto que dice "Estoy usando " y tu wiki tiene 3 páginas llamadas "stack", "overflow" y "" ... ¿qué parte de tu frase se vincula a dónde? ¡Pasará!
En un proyecto personal que hice con Sinatra ( enlace de texto ) después de ejecutar el contenido a través de Markdown, hago un gsub para reemplazar las palabras wiki y otras cosas (como [[Aquí está mi enlace]] y otras cosas) con los enlaces adecuados, en cada comprobando si la página existe y vincularla para crear o ver dependiendo.
No es el mejor, pero no construí esta aplicación con el almacenamiento en caché / velocidad en mente. Es una wiki simple de pocos recursos.
Si la velocidad era más importante, podría envolver la aplicación en algo para almacenarla en caché. Por ejemplo, sinatra se puede envolver con el almacenamiento en caché de Rack.
En función de mi experiencia en el desarrollo de Juli , que es una wiki personal sin conexión con autolink, generar un enfoque HTML estático puede solucionar tu problema.
Como piensas, lleva mucho tiempo generar una página Wiki autenticada. Sin embargo, al generar una situación HTML estática, la regeneración de la página Wiki autenticada solo ocurre cuando se agrega o borra una wikipage (en otras palabras, no ocurre al actualizar wikipage) y la ''regeneración'' se puede hacer en segundo plano, por lo que usualmente no importa cuánto tarde. El usuario verá solo el HTML estático generado.