# Sincronización de páginas estáticas: Permite sincronizar categorías privadas específicas

**URL:** https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676
**Category:** Development
**Created:** [26 Noviembre, 2025 02:45 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676 "2025-11-26T02:45:41Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [26 Noviembre, 2025 02:45 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/1 "2025-11-26T02:45:41Z")

</div>

Esto es como un tema de #Contribute > Feature - #Development, no estoy seguro de en cuál debería estar.

* * *

¿Existe alguna forma de modificar la configuración del sitio en un plugin? Estoy 99% seguro de que no, pero solo quiero confirmarlo.

Si no existe, ¿puedo proponer la idea de no hacerlo inmutable? O quizás, tener alguna API o una forma de “desbloquear” la propiedad inmutable de SiteSettings, ¿tal vez?

Un caso de uso posible que estoy considerando es incluir una lista de categorías protegidas en una configuración, de modo que sea más fácil para el administrador incluirlas o excluirlas.

Gracias.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [26 Noviembre, 2025 13:20 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/2 "2025-11-26T13:20:24Z")

</div>

> [@NateDhaliwal](#):
>
> ¿Hay alguna forma de modificar la configuración del sitio en un plugin? Estoy 99% seguro de que no, pero me gustaría confirmarlo.

¿Solo quieres cambiar el valor de la configuración del sitio? Simplemente haz `SiteSetting.whatever='new value`. ¿O quieres cambiar algo sobre ellas?

> [@NateDhaliwal](#):
>
> Un posible caso de uso que estoy considerando es incluir una lista de categorías protegidas en una configuración para que sea más fácil para el administrador incluirlas/excluirlas.

¿No quieres simplemente añadir una configuración para eso? ¿Simplemente añadir a `config/settings.yml`? Algo como

> <https://github.com/discourse/discourse-categories-suppressed/blob/main/config/settings.yml>

---

<div class="post-metadata">

### Author: ![mcwumbly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mcwumbly/32/103861_2.png) [@mcwumbly](https://meta.discourse.org/u/mcwumbly)
#### Post date: [26 Noviembre, 2025 13:27 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/3 "2025-11-26T13:27:02Z")

</div>

[quote=“NateDhaliwal, post:1, topic:389676”]Un caso de uso posible que estoy considerando es incluir una lista de categorías protegidas en una configuración para que sea más fácil para el administrador incluirlas/excluirlas.

[/quote]

Empecemos por aquí y trabajemos de afuera hacia adentro.

¿Puedes describir primero el caso de uso desde el punto de vista de la comunidad? ¿Qué están tratando de lograr y qué hace que sea difícil hacerlo ahora? ¿Qué característica imaginas que resolvería su necesidad de manera más efectiva (independientemente de cómo se implemente)?

Luego, podemos trabajar a partir de ahí para determinar si esto se hace mejor en un complemento o como una característica principal.

Luego, podemos trabajar a partir de ahí para discutir sugerencias sobre cómo implementarlo.

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [27 Noviembre, 2025 07:02 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/4 "2025-11-27T07:02:29Z")

</div>

@mcwumbly @pfaffman Gracias por informarme sobre

> [@pfaffman](#):
>
> `SiteSetting.whatever='new value`

Asumí erróneamente que dado que la configuración es inmutable en los TCs, también lo es en los plugins en Ruby. Voy a intentarlo.

Sería bueno hacerlos editables en los TCs. Mi caso de uso (para el cual estoy usando un plugin ahora) es que tomo todos los temas y publicaciones en todas las categorías por defecto y hago algunas cosas con ellos, pero no me gustaría incluir categorías protegidas (como una configuración de `excluded_categories`).

Sin embargo, si fuera posible agregar categorías protegidas a la configuración y luego acceder a ellas, sería más fácil. De esta manera, los administradores pueden incluir algunas categorías protegidas si lo desean eliminándolas de la configuración.

Con la idea de @pfaffman, probablemente se pueda hacer, pero no en los TCs.

> [@pfaffman](#):
>
> ¿No solo quieres agregar una configuración para eso? ¿Simplemente agregar a `config/settings.yml`? Algo como
> 
> [discourse-categories-suppressed/config/settings.yml at main · discourse/discourse-categories-suppressed · GitHub](https://github.com/discourse/discourse-categories-suppressed/blob/main/config/settings.yml)

El problema con esto es que no conozco las categorías protegidas de antemano.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [27 Noviembre, 2025 13:04 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/5 "2025-11-27T13:04:20Z")

</div>

> [@NateDhaliwal](#):
>
> Asumí erróneamente que dado que la configuración es inmutable en los Componentes Temáticos (TCs), también lo es en los plugins en Ruby. Voy a intentarlo.

Si has iniciado sesión como administrador, un componente temático podría cambiar `siteSettings` a través de la API.

> [@NateDhaliwal](#):
>
> pero no me gustaría incluir categorías protegidas (como una configuración `excluded_categories`).

¿Entonces simplemente creas una configuración de componente temático y añades esas categorías? No te refieres a alguna configuración de sitio `protected_categories` que no se me esté ocurriendo, ¿verdad? ¿Algo como esto?

> <https://github.com/discourse/discourse-category-banners/blob/main/settings.yml#L29-L47>

---

<div class="post-metadata">

### Author: ![mcwumbly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mcwumbly/32/103861_2.png) [@mcwumbly](https://meta.discourse.org/u/mcwumbly)
#### Post date: [27 Noviembre, 2025 13:18 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/6 "2025-11-27T13:18:32Z")

</div>

> [@NateDhaliwal](#):
>
> Mi caso de uso (para el cual estoy usando un complemento por ahora) es que tomo todos los temas y publicaciones en todas las categorías por defecto y hago algunas cosas con ellos, pero no me gustaría incluir categorías protegidas (como una configuración de `excluded_categories`).

Me encantaría saber más. Creo que me ayudaría a poner esta solicitud en un mejor contexto.

¿Estás dispuesto a compartir más sobre tu comunidad?

¿Eres el usuario principal de esta característica o hay otros en tu equipo que la necesiten? ¿Tienes documentación orientada al usuario para el flujo de trabajo que depende de esta característica? Si es así, ¿cómo se ve? Si no, ¿puedes describir brevemente cómo podría verse?

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [28 Noviembre, 2025 02:38 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/7 "2025-11-28T02:38:30Z")

</div>

@mcwumbly @pfaffman De acuerdo, déjame intentar explicar esto lo más posible.

Estoy desarrollando un complemento que toma temas y publicaciones y los publica en GitHub como archivos Markdown (como un archivo).

Sin embargo, no me gustaría incluir categorías privadas (¿creo que ahora _ese_ es el término correcto?) en esto, ya que son ‘privadas’.

Por lo tanto, estoy buscando una manera de rellenar previamente una configuración con la lista de categorías privadas, la cual no se puede definir dentro del parámetro `default`, ya que no sabría cuáles son las categorías privadas de antemano.

En caso de que esto se pueda hacer cambiando directamente `SiteSetting` en Ruby, ¿se puede hacer lo mismo con la configuración (`settings`) de un Componente de Tema? Estoy bastante seguro de que este último es inmutable. ¿Hay alguna manera de cambiarlo en un Componente de Tema?

---

<div class="post-metadata">

### Author: ![mcwumbly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mcwumbly/32/103861_2.png) [@mcwumbly](https://meta.discourse.org/u/mcwumbly)
#### Post date: [28 Noviembre, 2025 02:48 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/8 "2025-11-28T02:48:32Z")

</div>

Tenga paciencia conmigo.

Todavía quiero entender mejor desde la perspectiva del equipo de la comunidad qué problema está tratando de resolver.

> [@NateDhaliwal](#):
>
> Estoy desarrollando un complemento que toma temas y publicaciones y los publica en GitHub como archivos Markdown (como un archivo).

¿Qué tipo de comunidad es esta? ¿Quién la dirige? ¿Por qué quieren duplicar su contenido en GitHub?

¿Qué problema están tratando de resolver?

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [28 Noviembre, 2025 03:01 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/9 "2025-11-28T03:01:03Z")

</div>

No se trata realmente de la comunidad. Estoy intentando [esto](https://meta.discourse.org/t/any-updates-on-the-best-way-to-create-a-html-archive-of-a-static-site/373808) (con un trabajo de relleno también) a mi manera. Esto guarda cada tema y publicación como un archivo Markdown en un repositorio.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [28 Noviembre, 2025 12:56 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/10 "2025-11-28T12:56:44Z")

</div>

> [@NateDhaliwal](#):
>
> Sin embargo, no me gustaría incluir categorías privadas (creo que _ese_ es el término correcto ahora?) en esto, ya que son ‘privadas’.

Todavía no sé qué significa privado para ti. ¿Significa que solo quieres categorías que sean visibles para todos, o para usuarios anónimos? ¿O tienes alguna otra definición?

Si quieres esas, entonces tu complemento puede obtener solo esas, quizás mediante una búsqueda a la que le pases un usuario (o tal vez llamando a un guardián), o simplemente verificando los permisos.

O si privado es algo que es una opinión, entonces puedes agregar una configuración.

¿Y probablemente quieras hacer esto en un trabajo que se ejecuta diariamente o lo que sea?

Si estás enviando cosas a GitHub, pensaría que querrías que Discourse lo hiciera en lugar de molestarte con que tu navegador envíe datos a Discourse. No veo cómo o por qué lo harías con un componente de tema.

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [28 Noviembre, 2025 13:45 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/11 "2025-11-28T13:45:40Z")

</div>

Quiero decir categorías como #Staff, y otras que están limitadas por grupos. Creo que es posible con un complemento (plugin), pero supongo que entonces la configuración de TC no se puede modificar.

---

<div class="post-metadata">

### Author: ![mcwumbly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mcwumbly/32/103861_2.png) [@mcwumbly](https://meta.discourse.org/u/mcwumbly)
#### Post date: [28 Noviembre, 2025 13:59 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/12 "2025-11-28T13:59:43Z")

</div>

Otro enfoque posible sería externalizar esto aún más, en lugar de hacerlo como un complemento o un componente de tema.

Algún arte previo aquí: [Discourse Public Data Dump](https://meta.discourse.org/t/discourse-public-data-dump/264748)

De nuevo, creo que abordar esto tanto como sea posible desde la perspectiva del resultado final con el que estás trabajando, más fácil será aconsejar.

Así que gracias por compartir este enlace:

> [@NateDhaliwal](#):
>
> Estoy intentando [esto](https://meta.discourse.org/t/any-updates-on-the-best-way-to-create-a-html-archive-of-a-static-site/373808)

Quizás podamos usar eso como punto de partida para aclarar aún más la especificación funcional que has definido implícitamente hasta ahora.

La forma en que lo entiendo ahora es que quieres:

- crear un archivo html estático de un sitio Discourse
- mantenerlo actualizado a medida que se crea contenido nuevo
- excluir ciertas categorías

Y el diseño que estás explorando actualmente es:

- crear un complemento que:
  - permita a los administradores:
    - configurar explícitamente qué categorías excluir
    - configurar una URL de git para almacenar contenido estático

  - ejecute un trabajo en segundo plano periódicamente que:
    - cree archivos markdown para temas y publicaciones
    - los almacene en alguna estructura de archivos/directorios en un repositorio git

  - lo envíe a GitHub

- los usuarios finales puedan ver el contenido en GitHub como html

¿Es eso correcto?

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [29 Noviembre, 2025 02:42 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/13 "2025-11-29T02:42:09Z")

</div>

¡Totalmente acertado! He hecho una estructura básica de eso [aquí](https://github.com/NateDhaliwal/discourse-static-pages-sync).

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [29 Noviembre, 2025 09:05 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/14 "2025-11-29T09:05:52Z")

</div>

> [@NateDhaliwal](#):
>
> Me refiero a categorías como #Staff, y otras que están limitadas por grupos.

No necesitas una configuración para eso, esa información ya está disponible para un plugin.

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [29 Noviembre, 2025 09:30 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/15 "2025-11-29T09:30:21Z")

</div>

¿Entiendo correctamente que se refiere al método `Category.where(...)` para obtener estas categorías “privadas”? Pero, ¿qué pasa si el administrador quiere incluir (algunas de) esas categorías? ¿Necesito tener una configuración de `include categories` que contrarreste las categorías “privadas” definidas en el código? ¿Sería contraproducente?

ACTUALIZACIÓN: Entonces, SiteSettings se puede editar a través de un complemento. TC settings todavía no se pueden editar, ¿creo? Marcando [Modify SiteSettings/make SiteSettings mutable? - #2 by pfaffman](https://meta.discourse.org/t/modify-sitesettings-make-sitesettings-mutable/389676/2?u=natedhaliwal) como la Solución.

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [29 Noviembre, 2025 10:30 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/16 "2025-11-29T10:30:35Z")

</div>

> [@NateDhaliwal](#):
>
> ACTUALIZACIÓN: Así que SiteSettings se puede editar a través de un plugin. Los ajustes de TC todavía no se pueden, ¿creo?

Todavía no entiendo esto. Sí, puedes agregar esas configuraciones en un SiteSetting y sí, el plugin podría leer esa configuración e incluso cambiarla. Pero ¿por qué necesitaría cambiar la configuración dado el escenario anterior?

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [29 Noviembre, 2025 10:56 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/17 "2025-11-29T10:56:45Z")

</div>

Suponiendo que tengo 5 categorías: A, B, C, D y E. Ahora digamos que B y C solo están disponibles para algunos grupos. Para evitar que los temas privados aquí se compartan al subirse al repositorio, B y C se añaden a la configuración `excluded_categories`, junto con otros como, por ejemplo, #Staff.

Ahora, suponiendo que al administrador del sitio no le importa que se compartan los temas de B, puede eliminar B de la configuración, manteniendo C allí.

Así que `excluded_categories` tendría que cambiarse al principio para añadir las categorías “privadas” B y C. ¿No sé si eso tiene sentido?

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [29 Noviembre, 2025 11:43 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/18 "2025-11-29T11:43:35Z")

</div>

Aunque eso es perfectamente posible desde un punto de vista técnico, creo que el enfoque sería demasiado complicado, especialmente porque “al principio” es difícil de definir/detectar, y quieres evitar que el complemento siga añadiendo B después de que el administrador del sitio lo haya eliminado. Además, cuando se añade una nueva categoría privada, el complemento necesitaría añadirla, pero debería ser capaz de ver la diferencia entre una categoría nueva (añadir) y una categoría que fue eliminada previamente por el administrador (no volver a añadir).

Optaría por una configuración `include_private_categories` que comience vacía, y el complemento simplemente procesaría todas las categorías públicas Y las categorías en `include_private_categories`. Eso te dará muchos menos dolores de cabeza.

---

<div class="post-metadata">

### Author: ![mcwumbly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mcwumbly/32/103861_2.png) [@mcwumbly](https://meta.discourse.org/u/mcwumbly)
#### Post date: [29 Noviembre, 2025 13:49 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/19 "2025-11-29T13:49:41Z")

</div>

> [@RGJ](#):
>
> Dado cómo evolucionó este tema, lo muevo a #Dev

También he actualizado el título para describir mejor de qué trata realmente este tema.

---

<div class="post-metadata">

### Author: ![mcwumbly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mcwumbly/32/103861_2.png) [@mcwumbly](https://meta.discourse.org/u/mcwumbly)
#### Post date: [29 Noviembre, 2025 14:18 UTC](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676/20 "2025-11-29T14:18:44Z")

</div>

Otra alternativa de diseño que podría imaginar aquí es tener dos repositorios separados: uno para contenido público y otro para contenido privado.  
El repositorio de contenido privado en sí podría mantenerse privado (podrías determinar quién tiene acceso a él de forma independiente).

[Next page](https://meta.discourse.org/t/static-pages-sync-allowing-specific-private-categories-to-be-synced/389676.md?page=2)
