Introduktion
I Odoo beskriver modeller hur information organiseras och lagras. All affärsdata — från kundkort till produktbeskrivningar eller webbsidor — sparas på modellnivå i databasen.
Att förstå Odoo-modeller är lika viktigt för utvecklare som för funktionella konsulter. Modeller utgör ramverket för datalagring, relationer mellan objekt och var affärslogiken ligger implementerad.
Den här genomgången koncentrerar sig på website.page. Det är modellen som hanterar statiska sidor i din Odoo-webbplats — sådant du bygger och redigerar manuellt via webbeditorn eller via kod.
Vad är modellen website.page
website.page representerar en statisk sida i Website-appen. Typiska exempel är "Om oss", kontakt- eller kampanjsidor som du vill kunna styra separat från dynamiskt genererat innehåll.
Modellen använder Odookonceptet arv: den kopplar ihop poster med ir.ui.view via _inherits. Det innebär att själva sidans QWeb-mall och metadata ligger i ir.ui.view, medan website.page håller sidans webbspecifika egenskaper.
Dynamiskt genererade sidor, som produktlistor eller bloggarkiv, byggs däremot på andra mekanismer och hamnar inte i samma modell.
website.page är alltså avsedd för statiskt innehåll som skapas och redigeras i webbeditorn — inte för sidor som komponeras dynamiskt från kataloger eller queries.
Viktiga fält i modellen
Några fält i modellen är extra viktiga att känna till. De styr titlar, URL:er, publiceringsstatus, SEO och hur sidan visas i webbplatsens layout.
1. name
Typ: Char. Titel på sidan som visas i flikar, menyer och sökresultat. Namnet kommer ofta från den länkade ir.ui.view.
2. url
Typ: Char. Sidans sökväg på webbplatsen. Ska börja med ett snedstreck, t.ex. /kontakt eller /om-oss — det är den adress besökare använder för att nå sidan.
3. view_id
Typ: Many2one (ir.ui.view). Obligatorisk. Referens till QWeb-vyn som innehåller sidans XML-arkitektur. Radering av vyn påverkar sidan.
4. website_id
Typ: Many2one (website). Avgör vilken webbplats posten tillhör i fler-sajt-konfigurationer. Tomt värde kan innebära delade sidor.
5. is_published
Typ: Boolean. Anger om sidan är synlig för allmänheten. Opublicerade sidor returnerar vanligtvis 404 eller omdirigeras.
6. website_indexed
Typ: Boolean. Styr om sökmotorer får indexera sidan. Viktigt att stänga av för tack-sidor och interna bekräftelser.
7. date_publish
Typ: Datetime. Publiceringsdatum som används för schemaläggning och visning av när innehållet gick live.
8. header_visible
Typ: Boolean. Bestämmer om webbplatsens header ska visas på just den här sidan — användbart för landningssidor som ska vara fria från navigationsstörningar.
9. footer_visible
Typ: Boolean. Samma idé för sidfoten; kan stängas av för rena kampanjsidor eller fullskärmslayouter.
10. is_homepage
Typ: Boolean (beräknat). Visar om posten är inställd som startsida. Endast en startsida per webbplats kan vara sann.
11. is_visible
Typ: Boolean (beräknat). Indikerar om sidan faktiskt är synlig baserat på publiceringsstatus, datum och synlighetsregler.
12. menu_ids
Typ: One2many (website.menu). Kopplingar till menyposter. En sida kan dyka upp i flera menyer eller inte i någon alls.
13. create_date
Typ: Datetime. När posten skapades. Automatiskt underhållet — användbart vid revision och innehållsrapportering.
14. write_date
Typ: Datetime. Senaste ändringstidpunkt. Hjälper att följa upp redigeringar och innehållslivscykel.
15. arch
Typ: Text. Själva QWeb-mallen (XML) som lagras på ir.ui.view. Innehåller HTML-struktur och Odoo-snippets — kan redigeras i webbeditorn.
16. key
Typ: Char. Unik identifierare för vyn, viktig i modul-XML och arvsscenarion (t.ex. modul.view_name).
17. type
Typ: Selection. Visningstyp — för webbplatsidor är detta normalt qweb; andra typer är exempelvis form eller tree.
18. active
Typ: Boolean. Mjuk borttagning (arkivering). Kommer från ir.ui.view — arkiverade sidor serveras inte.
19. website_meta_title
Typ: Char. SEO-titel som visas i sökresultat och påverkar klickfrekvensen. Sätt en tydlig, beskrivande titel för varje offentlig sida.
20. website_meta_description
Typ: Text. Meta-beskrivning i sökresultat. Håll den runt 150–160 tecken för bästa visning i sökmotorer.
21. website_meta_keywords
Typ: Char. Meta-nyckelord — mindre betydelsefullt idag men fortfarande använt i vissa system. Separera med kommatecken.
22. header_overlay
Typ: Boolean. Anger om headern ligger ovanpå innehållet, användbart för hero-bannrar där headern ska överlappa bilden.
23. header_color
Typ: Selection. Färgtema för headern (transparent, ljus, mörk etc.) som påverkar kontrast och läsbarhet.
24. visibility
Typ: Selection. Åtkomstkontroll — alternativ som offentlig, inloggad användare, begränsad grupp eller skyddad med lösenord.
25. redirect_type
Typ: Selection. Bestämmer om en URL-ändring ska ge 301 (permanent), 302 (tillfällig) eller ingen omdirigering — viktigt för SEO vid flytt.
Hur modellen används i affärsflöden
1. Landningssidor och kampanjer
Marknadsföring skapar ofta fristående landningssidor för kampanjer. Varje sådan sida är en website.page-post där du styr URL, innehåll och publiceringstidpunkt.
2. Företagssidor
Sidor som Om oss, Kontakt eller juridiska dokument ligger normalt som website.page-poster och får uppdateras efter behov. Menyplacering sker via menu_ids.
3. Tack- och bekräftelsesidor
Tack-sidor efter formulär eller betalning bör markeras som icke-indexerade så att de inte dyker upp i sökresultaten.
4. Flera webbplatser och lokalisering
I ett multi-site-upplägg avgör website_id vilken sajt som visar sidan. Du kan duplicera och lokalisera innehåll för varje webbplats.
5. Innehåll bakom inloggning och begränsad åtkomst
Genom visibility-inställningen kan du skapa sidor enbart för inloggade användare eller specifika användargrupper — praktiskt för medlemsområden eller intern dokumentation.
Hur utvecklare bygger vidare på modellen
Utvecklare bygger på website.page med Odoos arv- och anpassningsmönster. Det ger flexibilitet att lägga till fält, valideringar och skräddarsydd logik.
Modellarv
Använd _inherit = 'website.page' för att utöka modellen. Då kan du lägga till fält, skriva om metoder eller införa constraints i en separat modul som håller anpassningar isolerade vid uppgraderingar.
Lägga till fält
Definiera nya Odoo-fält i din ärvda modell: Char, Many2one, Boolean, Integer, Text, Selection. Tänk på att använda webbplatsberoende fält om du hanterar flera webbplatser.
Python-förlängningar
Skriv om create, write eller unlink för att införa extra logik — kom ihåg att alltid anropa super() där det behövs och var försiktig med view_id-kopplingen eftersom vyer kan kaskadraderas.
Odoo Studio
Odoo Studio är användbart för snabba layout- och fältändringar utan kod. För mer komplex funktionalitet eller API-drivna flöden är modulbaserad utveckling att föredra för långsiktig underhållbarhet.
Rekommenderade arbetssätt
- Använd URL-vänliga slugs utan mellanslag eller specialtecken — bindestreck är bäst för läsbarhet och sökmotorvänlighet.
- Sätt website_indexed till False för tack-sidor, bekräftelser och interna sidor så de inte indexeras.
- När du ändrar URL:er, konfigurera omdirigeringar (301 eller 302) för att bevara SEO-värde och undvika brutna länkar.
- Fyll i website_meta_title och website_meta_description för varje offentlig sida — det förbättrar synligheten i sökresultat.
- När du skapar sidor via API eller XML-RPC: skapa ir.ui.view först, därefter website.page med view_id. Se till att vyn är av typen qweb och har en unik key.
Vanliga misstag
- Att skapa en website.page utan giltig view_id leder till fel — vyn måste finnas och vara av typen qweb.
- Använd alltid URL:er som börjar med ett snedstreck (/kontakt), annars kommer Odoo inte att känna igen sökvägen korrekt.
- Att glömma website_indexed på tack-sidor gör att de kan hamna i sökresultat och spä ut relevant innehåll.
- Byter du URL utan att lägga in omdirigering riskerar gamla länkar och sökmotorindex att brytas.
- Om du redigerar arch i en vy som tidigare redigerats i webbeditorn kan noupdate-flaggan i ir.model.data hindra XML-ändringar — kontrollera och återställ vid behov.
Sammanfattning
website.page är navet för hantering av statiska sidor i Odoo: här ligger metadata, URL-regler och publiceringsinställningar medan själva HTML-mallen förvaras i ir.ui.view.
Att förstå modellens fält och dess relation till ir.ui.view gör det enklare att konfigurera, anpassa och integrera Odoo-webbplatser — oavsett om du jobbar funktionellt eller tekniskt.
Behöver du hjälp med din Odoo-implementering?
Dasolo hjälper företag att implementera, anpassa och optimera Odoo. Vi specialiserar oss på API-integrationer och skräddarsydd utveckling med djup kunskap om Odoos datamodeller, inklusive website.page.
Behöver du stöd med Odoo, anpassade webbsidor eller integrationer? Vi kan assistera från kravställning till leverans. Boka en demo för att diskutera ditt projekt.