Contenido estructurado
Modelos, registros, medios y formularios: los datos que renderizan tus bloques y cómo los bloques llegan a ellos.
Las páginas se componen de bloques, y los bloques necesitan datos. Parte de ellos vive dentro de la propia instancia del bloque: un titular, un párrafo, una imagen. El resto vive en colecciones estructuradas que defines una vez y reutilizas en todas partes: modelos, registros, medios y formularios.
Modelos y registros
Un modelo es un esquema para un tipo de contenido: un producto, un autor, una oferta de empleo, un caso de éxito. Un registro es una entrada según ese esquema. Los modelos viven a nivel de workspace, no de página, así que la misma colección alimenta tantas páginas y bloques como quieras.
Los modelos se definen en el workspace, no en el código del frontend. Es justo lo contrario que los esquemas de bloques, que son código y viajan con tu repositorio; la división es deliberada: la forma de la UI en código, la forma de los datos en cmssy.
Conectar registros con bloques
Los bloques traen registros mediante un campo de relación. Una relación guarda ids, no copias: la API de entrega los resuelve a registros completos en el renderizado, así que un registro editado una vez se actualiza en todos los sitios donde aparece.
- picked (por defecto): el editor elige un registro, o varios con
multiple: true. Un caso de éxito destacado; los tres planes de una página de precios. mode: "all": el campo no guarda nada; el bloque recibe todos los registros del modelo, ordenados porsorty acotados porlimit. Útil para un índice de blog o unas FAQ que nunca deberían requerir recuración.
Por eso un bloque de "últimas entradas" sigue funcionando tras añadir una entrada: guarda una consulta, no una instantánea.
Medios
Imágenes y archivos viven en la biblioteca de medios del workspace, organizada en carpetas. Los bloques referencian medios por URL, y cada subida obtiene su propia URL con hash, así que subir un reemplazo no actualiza los bloques que apuntan al archivo antiguo. Redirígelos. No existe el reemplazo en el sitio, así que el remedio es repuntar los bloques: un buscar-y-reemplazar sobre el contenido de los bloques, justo en lo que el servidor MCP es bueno. Subidas, carpetas y movimientos están disponibles vía el servidor MCP, lo que hace scriptable el trabajo masivo con medios.
Formularios
Los formularios se construyen visualmente en el workspace y los renderiza el bloque al que los conectes. Los envíos vuelven a cmssy, donde cada uno lleva un estado que mueves por tu propio flujo de trabajo.
El envío es la única escritura que tu frontend público puede hacer sin token: pasa por la mutación form.submit de la API de entrega. Todo lo demás sobre formularios (crearlos, leer envíos, cambiar estado) requiere un cliente autorizado.
Todo es multilingüe
Cada campo es multilingüe por defecto. El contenido se almacena indexado por código de idioma, así que un registro lleva todas sus traducciones y la API de entrega entrega a tu frontend la correcta para el locale activo. No modelas traducciones: las rellenas.