Introducción
En Odoo, los modelos definen cómo se estructura y almacena la información en la base de datos. Cada pieza de datos empresariales con la que trabajas reside en un modelo.
Entender los modelos de Odoo es esencial tanto para desarrolladores como para consultores funcionales. Los modelos son la base de la arquitectura de datos de Odoo. Definen los campos de Odoo, las relaciones y la lógica empresarial.
Este artículo se centra en el modelo website.page. Este modelo potencia las páginas estáticas en tu sitio web de Odoo. Ya sea que estés creando páginas de aterrizaje personalizadas, gestionando contenido o integrándote con sistemas externos, trabajarás con este modelo.
¿Qué es el modelo website.page?
El modelo website.page representa páginas web estáticas en Odoo. Es parte de la aplicación Website y almacena las páginas que creas manualmente, como Acerca de nosotros, Contacto o páginas de destino personalizadas.
Este modelo en Odoo utiliza la herencia de modelos de Odoo. Hereda de ir.ui.view a través del mecanismo _inherits. Cada registro de website.page se vincula a una ir.ui.view que contiene la plantilla QWeb (arch) y metadatos.
Las páginas dinámicas, como la tienda o la lista de blogs, se generan de manera diferente.
No se almacenan como registros de website.page. El modelo website.page es específicamente para contenido estático que creas y editas a través del constructor de sitios web.
Campos clave en el modelo
Aquí están los campos más importantes de Odoo en el modelo website.page. Comprender estos te ayudará a trabajar de manera efectiva con las páginas web.
1. nombre
Tipo: Char. Este campo almacena el título de la página. Se muestra en la pestaña del navegador, en los menús y en los resultados de búsqueda. Proviene de la ir.ui.view vinculada.
2. url
Tipo: Char. La ruta URL de la página. Debe comenzar con una barra. Ejemplos: /contactus, /about-us. Esta es la ruta que los visitantes utilizan para acceder a la página.
3. view_id
Tipo: Many2one (ir.ui.view). Requerido. Se vincula a la vista QWeb que contiene el contenido de la página. La vista contiene el arch (plantilla XML) y la clave. Eliminar la vista cascada a la página.
4. website_id
Tipo: Many2one (sitio web). El sitio web al que pertenece esta página. En configuraciones de múltiples sitios web, las páginas pueden ser específicas de un sitio web o compartidas (cuando están vacías).
5. está_publicado
Tipo: Booleano. Si la página es visible para los visitantes. Las páginas no publicadas devuelven 404 o redirigen. Usa esto para ocultar páginas sin eliminarlas.
6. sitio_web_indexado
Tipo: Booleano. Controla si los motores de búsqueda pueden indexar la página. Establece en Falso para páginas de agradecimiento o páginas internas que no deseas en los resultados de búsqueda.
7. fecha_publicar
Tipo: Fecha y hora. La fecha de publicación. Se utiliza para la publicación programada y para mostrar cuándo se hizo público el contenido.
8. encabezado_visible
Tipo: Booleano. Si se debe mostrar el encabezado del sitio web en esta página. Útil para páginas de destino o experiencias de pantalla completa donde deseas ocultar el encabezado.
9. pie_de_página_visible
Tipo: Booleano. Si se debe mostrar el pie de página del sitio web. Al igual que encabezado_visible, esto te permite crear páginas sin el pie de página estándar.
10. es_página_principal
Tipo: Booleano. Campo calculado. Verdadero cuando esta página está configurada como la página de inicio del sitio web. Solo una página por sitio web puede ser la página de inicio.
11. es_visible
Tipo: Booleano. Calculado. Indica si la página es visible según el estado de publicación, la fecha y las reglas de visibilidad.
12. menu_ids
Tipo: One2many (website.menu). Los elementos del menú que enlazan a esta página. Una página puede aparecer en múltiples menús o en ninguno.
13. create_date
Tipo: Datetime. Cuándo se creó el registro. Gestionado automáticamente por Odoo. Útil para auditorías e informes.
14. write_date
Tipo: Datetime. Cuándo se modificó por última vez el registro. También gestionado automáticamente. Ayuda a rastrear actualizaciones de contenido.
15. arch
Tipo: Texto. La plantilla XML QWeb. Almacenada en el ir.ui.view vinculado. Contiene la estructura HTML y los fragmentos de Odoo. Editable a través del constructor de sitios web.
16. clave
Tipo: Char. Identificador único para la vista. Se utiliza en XML del módulo y para la herencia. El formato suele ser módulo.nombre_vista.
17. tipo
Tipo: Selección. El tipo de vista. Para páginas web, esto siempre es qweb. Otros tipos incluyen formulario, lista y árbol.
18. activo
Tipo: Booleano. Indicador de eliminación suave. Cuando es Falso, el registro se archiva. Proviene de ir.ui.view. Las páginas archivadas no se sirven.
19. website_meta_title
Tipo: Char. Título meta SEO. Sobrescribe el título predeterminado en los resultados de búsqueda. Importante para la visibilidad SEO.
20. website_meta_description
Tipo: Texto. Descripción meta SEO. El fragmento que se muestra en los resultados de los motores de búsqueda. Mantenerlo entre 150 y 160 caracteres para una mejor visualización.
21. website_meta_keywords
Tipo: Char. Palabras clave meta. Menos importantes para el SEO moderno, pero aún utilizadas por algunos sistemas. Separadas por comas.
22. header_overlay
Tipo: Booleano. Si el encabezado se superpone al contenido. Se utiliza para páginas de estilo héroe donde el encabezado se sitúa sobre el banner.
23. color_encabezado
Tipo: Selección. Esquema de color del encabezado. Opciones como transparente, claro u oscuro. Afecta el contraste y la legibilidad.
24. visibilidad
Tipo: Selección. Control de acceso. Las opciones incluyen Público, Conectado, Grupo Restringido o Con Contraseña. Controla quién puede ver la página.
25. tipo_redirección
Tipo: Selección. Cuando la URL cambia, esto define la redirección: 301 permanente, 302 temporal o ninguna. Importante para SEO al mover páginas.
Cómo se utiliza este modelo en los flujos de trabajo empresariales
1. Páginas de Aterrizaje y Campañas
Los equipos de marketing crean páginas de aterrizaje para campañas. Cada página es un registro website.page. Controlan la URL, el contenido y la fecha de publicación. La publicación programada utiliza date_publish.
2. Páginas Corporativas
Sobre Nosotros, Contacto, Términos de Servicio y Política de Privacidad son típicamente registros website.page. Se crean una vez y se actualizan según sea necesario. La ubicación en el menú se gestiona a través de menu_ids.
3. Páginas de Agradecimiento y Confirmación
Páginas como "Formulario de contacto enviado" o "Tarea recibida" son registros de website.page. Establezca website_indexed en False para que no aparezcan en los resultados de búsqueda.
4. Multi-sitio y Localización
En configuraciones de múltiples sitios, website_id determina qué sitio muestra la página. Puede duplicar páginas por sitio con contenido localizado.
5. Contenido Restringido y Acceso Restringido
El campo de visibilidad le permite crear páginas solo para usuarios registrados, o para grupos específicos. Útil para áreas de miembros o documentación interna.
Cómo los desarrolladores extienden este modelo
Los desarrolladores extienden website.page utilizando varios patrones. La herencia de modelos de Odoo es el principal mecanismo.
Herencia de Modelos
Utilice _inherit = 'website.page' para extender el modelo. Agregue nuevos campos de Odoo, sobrescriba métodos o añada restricciones. El modelo heredado en Odoo mantiene sus cambios en un módulo separado para facilitar las actualizaciones.
Añadiendo Campos
Defina nuevos campos de Odoo en su modelo heredado. Utilice el tipo de campo adecuado: Char, Many2one, Boolean, Integer, Text, Selection. Considere campos dependientes del sitio para múltiples sitios.
Extensiones de Python
Sobrescriba create, write o unlink para agregar lógica. Utilice super() para llamar al original. Tenga cuidado con la relación view_id y el comportamiento de cascada.
Odoo Studio
Odoo Studio te permite personalizar páginas sin código. Es bueno para cambios rápidos de diseño. Para lógica compleja o contenido impulsado por API, los módulos personalizados son más mantenibles.
Mejores prácticas
- Usa slugs amigables con URL. Evita espacios y caracteres especiales. Usa guiones para mejorar la legibilidad.
- Establece website_indexed en False para páginas de agradecimiento, páginas de confirmación y páginas internas.
- Al cambiar URLs, habilita la redirección (301 o 302) para preservar el valor SEO y evitar enlaces rotos.
- Completa website_meta_title y website_meta_description para cada página pública. Esto mejora la visibilidad SEO.
- Al crear páginas a través de API o XML-RPC, crea primero el ir.ui.view, luego la website.page con view_id. Asegúrate de que la vista tenga tipo qweb y una clave única.
Errores comunes
- Creando una website.page sin un view_id válido. La vista debe existir y tener tipo qweb.
- Usando URLs que no comienzan con una barra. Odoo espera rutas como /contactus, no contactus.
- Olvidando establecer website_indexed en páginas de agradecimiento. Terminan en los resultados de búsqueda y pueden diluir el SEO.
- Cambiando una URL de página sin configurar una redirección. Los enlaces antiguos se rompen y los motores de búsqueda pierden la conexión.
- Modificando el arch de una vista que fue editada en el constructor de sitios web. La bandera noupdate en ir.model.data puede evitar que tus cambios XML se apliquen. Restablécela si es necesario.
Conclusión
El modelo website.page es central para la gestión de páginas estáticas en Odoo. Almacena metadatos de la página, URLs y configuraciones de publicación. El contenido real reside en la vista ir.ui.view vinculada.
Entender sus campos y cómo hereda de ir.ui.view te ayudará a configurar, personalizar e integrar sitios web de Odoo de manera efectiva. Ya seas un consultor funcional o un desarrollador, un sólido entendimiento de website.page te ahorrará tiempo y evitará errores.
¿Necesitas ayuda con tu implementación de Odoo?
Dasolo ayuda a las empresas a implementar, personalizar y optimizar Odoo. Nos especializamos en integraciones de API y desarrollo de Odoo. Nuestro equipo tiene una profunda experiencia con la arquitectura de datos de Odoo y modelos como website.page.
Si necesitas ayuda con tu implementación de Odoo, páginas web personalizadas o integraciones, estamos aquí para ayudar. Reserva una demostración para discutir tu proyecto.