Wstęp
W Odoo modele określają strukturę danych zapisywanych w bazie. Każdy element informacji biznesowej — od produktów po wpisy na blogu — ma swoje miejsce w odpowiednim modelu.
Zrozumienie modeli Odoo jest niezbędne zarówno dla programistów, jak i konsultantów funkcjonalnych. To one tworzą szkielet architektury danych: definiują pola, relacje między rekordami oraz logikę biznesową stosowaną podczas zapisu i odczytu.
W tym tekście skupimy się na modelu odpowiadającym za konfigurację strony internetowej. To właśnie on steruje ustawieniami witryny — od domeny i języków po wygląd i integracje zewnętrzne — więc przy pracy z witrynami Odoo często będziesz z nim obcować.
Czym jest model strony w Odoo
Model strony w Odoo przechowuje konfigurację witryny. Zawiera informacje, które decydują o wyglądzie i działaniu serwisu: adres domeny, obsługiwane języki, elementy identyfikacji wizualnej, linki społecznościowe oraz strukturę menu.
Ten model należy do aplikacji Website i jest wykorzystywany przez każdą instalację witryny. W scenariuszach multi-site tworzy się oddzielny rekord dla każdej domeny — każdy rekord może mieć własne ustawienia firmy, języków i szablonów.
Wiele innych modeli odnosi się do modelu strony przez pole website_id. Dzięki temu treści takie jak strony, produkty czy wpisy blogowe można powiązać z konkretną witryną, co ułatwia filtrowanie i separację danych między stronami.
Najważniejsze pola w modelu
Poniżej znajdziesz przegląd kluczowych pól modelu website. Znajomość ich znaczenia przyspieszy konfigurację i debugowanie witryn w Odoo.
1. name
Typ: Char. Pole obowiązkowe przechowujące nazwę witryny. Jest widoczne w panelu administracyjnym i służy jako podstawowa etykieta rozróżniająca strony.
2. sequence
Typ: Integer. Domyślnie 10. Określa kolejność wyświetlania witryn w interfejsie — mniejsze wartości pojawiają się wyżej.
3. domain
Typ: Char. Adres domeny (np. https://www.twojadomena.pl). Odoo automatycznie doda protokół, jeśli go brak. Domena musi być unikalna i służy do routingu oraz SEO.
4. company_id
Typ: Many2one (res.company). Pole obowiązkowe wiążące witrynę z firmą w systemie. W konfiguracjach multi-company witryna pokazuje jedynie dane powiązane z tą firmą.
5. language_ids
Typ: Many2many (res.lang). Lista języków dostępnych na stronie. Umożliwia odwiedzającym przełączanie języków; domyślnie obejmuje wszystkie zainstalowane języki.
6. language_count
Typ: Integer. Pole obliczane. Przechowuje liczbę obsługiwanych języków — przydatne przy prezentacji i filtrowaniu.
7. default_lang_id
Typ: Many2one (res.lang). Pole obowiązkowe określające domyślny język dla nowych odwiedzających. Wartość musi należeć do language_ids.
8. auto_redirect_lang
Typ: Boolean. Domyślnie True. Gdy włączone, użytkownicy są przekierowywani do wersji językowej zgodnej z ustawieniami ich przeglądarki, jeśli jest dostępna.
9. cookies_bar
Typ: Boolean. Jeśli True, na stronie wyświetlany jest pasek zgody na ciasteczka — przydatne przy realizowaniu wymagań RODO. Odoo może automatycznie utworzyć stronę polityki ciasteczek.
10. logo
Typ: Binary. Logo witryny używane w nagłówku i innych miejscach. Jeśli nie ustawiono, wykorzystywane jest domyślne logo Odoo.
11. favicon
Typ: Binary. Ikona wyświetlana na karcie przeglądarki. Odoo skaluje ją do rozmiaru 256x256 px.
12. social_twitter
Typ: Char. URL konta Twitter/X. Domyślnie pobierany z ustawień firmy; wykorzystywany w stopce i przy udostępnianiu treści.
13. social_facebook
Typ: Char. URL konta Facebook. Działa analogicznie do pozostałych pól społecznościowych.
14. social_linkedin
Typ: Char. URL profilu LinkedIn.
15. social_instagram
Typ: Char. URL konta Instagram.
16. social_youtube
Typ: Char. URL kanału YouTube.
17. social_github
Typ: Char. URL profilu GitHub.
18. social_tiktok
Typ: Char. URL konta TikTok.
19. social_default_image
Typ: Binary. Domyślny obraz używany przy udostępnianiu w social mediach. Jeśli ustawiony, używany zamiast logo do tagów Open Graph i kart Twittera.
20. google_analytics_key
Typ: Char. Klucz Google Analytics do śledzenia ruchu. Po konfiguracji Odoo osadza odpowiedni skrypt.
21. google_maps_api_key
Typ: Char. Klucz API Google Maps do modułów lokalizacji i wyświetlania map.
22. user_id
Typ: Many2one (res.users). Pole obowiązkowe wskazujące publicznego użytkownika przypisanego do witryny — używane przy dostępie do portalu i obsłudze anonimowych gości. Domyślnie pobierane z ustawień firmy.
23. cdn_activated
Typ: Boolean. Gdy True, zasoby statyczne mogą być serwowane z CDN, co poprawia wydajność ładowania.
24. cdn_url
Typ: Char. Bazowy adres CDN używany po włączeniu opcjonalnego serwowania zasobów przez CDN.
25. cdn_filters
Typ: Text. Wzorce regex określające adresy URL, które należy przepisać do CDN. Domyślnie obejmuje ścieżki statyczne.
26. menu_id
Typ: Many2one (website.menu). Pole obliczane wskazujące główne menu witryny — korzeń struktury nawigacji.
27. homepage_url
Typ: Char. Ścieżka do strony głównej (np. /kontakt lub /sklep). Powinna zaczynać się od ukośnika.
28. custom_code_head
Typ: Html. Dowolny kod wstrzykiwany w sekcję strony — przydatne do skryptów analitycznych, meta tagów lub zewnętrznych bibliotek.
29. custom_code_footer
Typ: Html. Kod umieszczany w stopce — dobra lokalizacja dla widgetów czatu, skryptów remarketingowych itp.
30. robots_txt
Typ: Html. Treść pliku robots.txt kontrolująca indeksowanie przez roboty wyszukiwarek — istotne dla SEO i ochrony części serwisu przed crawlowaniem.
31. theme_id
Typ: Many2one (ir.module.module). Zainstalowany motyw strony, który determinuje layout i styl całej witryny.
32. auth_signup_uninvited
Typ: Selection. Opcje: b2b (Na zaproszenie) lub b2c (Rejestracja swobodna). Reguluje, czy odwiedzający mogą tworzyć konta bez zaproszenia.
33. create_date
Typ: Datetime. Data utworzenia rekordu — zarządzana automatycznie przez Odoo.
34. write_date
Typ: Datetime. Data ostatniej modyfikacji rekordu — również zarządzana automatycznie.
Jak model strony wpisuje się w procesy biznesowe
1. Multi‑strony i lokalizacja
Firmy prowadzące kilka marek lub działające w różnych regionach zwykle tworzą osobny rekord witryny dla każdego serwisu. Dzięki temu każda strona może mieć własną domenę, języki i treści, a pole website_id na stronach, produktach i wpisach gwarantuje, że zawartość jest przypisana do właściwej witryny.
2. Tożsamość i branding
Logo, favicon oraz linki społecznościowe konfiguruje się per witryna — to marketing często aktualizuje te elementy podczas rebrandingu. Pole social_default_image pomaga zadbać o atrakcyjny wygląd udostępnianych linków w mediach społecznościowych.
3. Języki i SEO
Pola language_ids i default_lang_id decydują, jakie wersje językowe są dostępne. Włączenie auto_redirect_lang poprawia doświadczenie międzynarodowych użytkowników, a poprawna konfiguracja wspiera działania SEO, np. prawidłowe tagi hreflang.
4. Wydajność i CDN
Wraz ze wzrostem ruchu warto rozważyć włączenie cdn_activated i ustawienie cdn_url, żeby odciążyć serwer i przyspieszyć ładowanie zasobów. cdn_filters pozwalają precyzyjnie określić, które ścieżki mają być kierowane przez CDN.
5. Zgodność i analityka
Pasek ciasteczek (cookies_bar) pomaga w spełnieniu wymogów RODO, natomiast google_analytics_key oraz custom_code_head umożliwiają osadzenie narzędzi analitycznych. robots_txt daje kontrolę nad tym, co indeksują roboty wyszukiwarek.
Jak deweloperzy rozbudowują ten model
Deweloperzy rozszerzają model strony, korzystając z kilku sprawdzonych wzorców. Główną techniką jest dziedziczenie modeli w Odoo.
Dziedziczenie modelu
W praktyce stosuje się _inherit = 'website' by dodać pola lub nadpisać metody. Dzięki temu zmiany trafiają do własnego modułu, co ułatwia utrzymanie i aktualizacje systemu.
Dodawanie pól
W rozszerzeniu definiuje się nowe pola odpowiedniego typu: Char, Many2one, Boolean, Integer, Text, Selection. Przy projektowaniu warto przewidzieć zachowanie w scenariuszach multi‑website — czy pole ma być wspólne, czy zależne od witryny.
Rozszerzenia w Pythonie
Możesz nadpisać create, write lub unlink, by dodać logikę biznesową — pamiętaj, by wywołać super(), by nie złamać standardowego przepływu i kompatybilności z innymi modułami. Szczególną ostrożność wymagają operacje ustawiające user_id i company_id przy tworzeniu witryn przez API.
Odoo Studio
Odoo Studio pozwala dodać pola i proste zmiany bez programowania — to szybkie rozwiązanie dla prostych rozszerzeń. Jednak przy złożonej logice lub wymaganiach integracyjnych lepszym wyborem będą dedykowane moduły.
Dobre praktyki
- W środowisku produkcyjnym ustawiaj domenę dla każdej witryny — to usprawnia routing i wspiera indeksowanie przez wyszukiwarki.
- Upewnij się, że default_lang_id należy do language_ids — Odoo to weryfikuje przy zmianie.
- Wszystkie skrypty trzecich stron wstrzykuj lepiej przez custom_code_head lub custom_code_footer, zamiast modyfikować podstawowe szablony — upraszcza to aktualizacje.
- Przy integracjach API korzystaj z XML‑RPC lub JSON‑RPC; model strony jest eksponowany i należy poprawnie mapować website_id przy synchronizacji treści.
- Dla własnych pól stosuj prefiksy x_ lub prefiks modułu, żeby uniknąć konfliktów z przyszłymi wersjami Odoo.
Częste błędy
- Tworzenie zduplikowanych domen. Pole domain ma ograniczenie unikalności — próba dodania tej samej domeny zakończy się błędem.
- Zapominanie o ustawieniu user_id podczas tworzenia witryn przez API — pole to jest wymagane i brak wartości spowoduje niepowodzenie operacji.
- Podawanie homepage_url bez wiodącego ukośnika. Odoo waliduje tę wartość i zgłosi błąd, jeśli ścieżka nie zaczyna się od '/'.
- Włączenie cdn_activated bez poprawnego cdn_url. Skutkiem może być brak ładowania zasobów ze strony i błędy w wyglądzie witryny.
- Nadpisywanie kluczowych metod bez wywołania super(). Może to złamać działanie innych modułów i utrudnić przyszłe aktualizacje Odoo.
Podsumowanie
Model strony to serce konfiguracji witryny w Odoo — przechowuje domenę, ustawienia językowe, elementy identyfikacji i zachowania. Znajomość jego pól oraz powiązań z innymi modelami pozwala efektywnie konfigurować, rozszerzać i integrować witryny Odoo.
Bez względu na to, czy projektujesz architekturę multi‑site jako konsultant, czy tworzysz moduły jako deweloper, dobre opanowanie modelu strony oszczędzi czasu i zmniejszy ryzyko błędów.
Potrzebujesz pomocy przy wdrożeniu Odoo?
Dasolo wspiera firmy we wdrożeniach, dopasowywaniu i optymalizacji Odoo. Specjalizujemy się w integracjach API oraz rozwoju modułów — mamy doświadczenie z modelami Odoo, w tym z modelem strony.
Jeśli potrzebujesz wsparcia przy wdrożeniu Odoo, konfiguracji wielu witryn lub integracjach — chętnie pomożemy. Umów demo by omówić Twój projekt.