Product Templates
| Campo | Valor |
|---|---|
| Handler | admin/handlers/product_template.go |
| Ruta base | /admin/catalog/products/:id/template-panel |
| Modelo | product_template_overrides |
| Estado | Implementado |
Descripción
El módulo de plantillas de producto permite configurar la apariencia visual de la ficha de producto. Hereda la configuración global del tema publicado y permite overrides por producto individual. Espejo de ReviewSettingsHandler.
Endpoints
| Método | Ruta | Acción |
|---|---|---|
| GET | /admin/catalog/products/:id/template-panel | Panel HTMX de apariencia |
| POST | /admin/catalog/products/:id/template-override | Set override de campo |
| DELETE | /admin/catalog/products/:id/template-override | Remover override |
Campos
Fields (Configuración de Plantilla)
| Campo | Tipo | Descripción |
|---|---|---|
gallery_layout | enum | grid, stacked, carousel |
gallery_aspect_ratio | enum | square, portrait, landscape |
show_thumbnails | bool | Mostrar miniaturas |
show_sku | bool | Mostrar SKU |
show_vendor | bool | Mostrar marca/vendedor |
show_quantity_selector | bool | Selector de cantidad |
show_add_to_cart | bool | Botón agregar al carrito |
show_description | bool | Mostrar descripción |
show_reviews | bool | Mostrar reseñas |
show_related_products | bool | Mostrar productos relacionados |
sticky_add_to_cart | bool | Botón sticky en mobile |
template_suffix | string | Template alternativo |
EffectiveFields
| Campo | Tipo | Descripción |
|---|---|---|
fields | Fields | Campos efectivos (global + override) |
overridden | map[string]bool | Qué campos están sobreescritos |
template_suffix | string | Template suffix del producto |
Herencia
Tema Publicado (global)
└── product_template section
├── gallery_layout: "grid"
├── show_sku: true
└── ...
Producto Individual (override)
└── gallery_layout: "carousel" ← override
└── (show_sku no está → hereda global)
Orden de resolución:
- Buscar en
theme_settings(publicado) → secciónproduct_template - Si no existe, buscar en
theme_settings_draft - Si tampoco, usar
domain.Default() - Aplicar overrides del producto individual
Override
Para setear un override:
POST /admin/catalog/products/:id/template-override
Form: field=gallery_layout&value=carousel
Para remover:
DELETE /admin/catalog/products/:id/template-override
Form: field=gallery_layout
Notas
- El panel se carga como HTMX partial (
product-template-panel) - Los overrides se muestran visualmente (borde/glow) para distinguir del global
- El
template_suffixpermite usar templates alternativos (ej: "minimal", "full-width") - La configuración global viene del tema, no de settings independientes