¿Cómo extraes datos de la DB para los componentes de tu tema?

¿Alguien sabe si hay una guía o ejemplo de esto en algún lugar, por favor?

Por ejemplo, si uso un componente de tema para crear una columna lateral, ¿cómo puedo listar los 20 temas públicos más recientes (o, si es más fácil, de las categorías que enumero en la consulta) en esa columna lateral/componente de tema?

1 me gusta

Hay varias formas de hacerlo. La más sencilla es usar una llamada AJAX al punto de acceso en la API de Rails que sirve los datos que deseas mostrar. Si quieres los 20 temas más recientes, podrías probar con /latest.json.

El desafío surge si necesitas combinar información de varios puntos de acceso, ya que entonces debes esperar a que se completen múltiples llamadas, lo que puede ralentizar considerablemente el rendimiento del componente del tema.

4 Me gusta

¡Gracias por la respuesta, Justin! :slight_smile:

¿Existe una forma sencilla de reutilizar simplemente los feeds/datos que Discourse ya proporciona? (Para que también respeten la configuración del usuario).

Por ejemplo, en una columna lateral podríamos tener:

  • Últimos 10 temas (feed de la página “Últimos”, pero que también respeta las categorías silenciadas)
  • Temas destacados esta semana (de /top)
  • Temas destacados este mes
  • Temas destacados este año
  • Usuarios más activos este mes (de /u?period=monthly)

Esto es bastante fácil de hacer en otras plataformas de foros y realmente lo echo de menos en Discourse :sob:

Totalmente. Las peticiones Ajax a los endpoints asociados respetarán la configuración actual del usuario.

Acceder a /latest.json solo mostrará los temas más recientes que ese usuario puede ver.

¡Haz una petición GET a las mismas rutas añadiendo .json al final de la URL y mira qué encuentras!

1 me gusta

¿Crees que eso sería más o menos lo mismo que simplemente consultar la base de datos con las consultas que esos puntos de extremo ejecutan de todos modos? (¿O consumiría significativamente más recursos, ya que podría ser equivalente a cargar 5 páginas adicionales, una por cada punto de extremo?).

De todos modos, me encantaría experimentar con esto. ¿Hay alguna guía o tutorial que muestre cómo obtener datos de un punto de extremo en un componente de tema? (¿O sería mejor o más eficiente crear un complemento en su lugar?).

Sé cómo crear un componente de tema y un complemento ‘ficticio’, pero no he encontrado ninguna guía que muestre cómo obtener datos de la base de datos en ellos.

https://meta.discourse.org/t/how-to-add-a-featured-topic-list-to-your-discourse-homepage/132949

Esta guía muestra cómo hacerlo con una etiqueta específica, pero puedes replicar este enfoque con cualquier punto de conexión en realidad.

3 Me gusta