Introduzione
In Odoo, un modello descrive la forma dei dati: quali informazioni vengono salvate, come si collegano fra loro e dove finiscono nel database. Ogni elemento gestito dall'azienda — pagine, prodotti, menu — è memorizzato all'interno di un record di un modello.
Per consulenti funzionali e programmatori è fondamentale padroneggiare i modelli Odoo. Sono la spina dorsale dell'architettura dati: definiscono i campi, i vincoli, le relazioni e il comportamento applicativo che poi guidano interfacce, logica di business e integrazioni.
Qui ci concentriamo sul modello Website, quello che governa la configurazione dei siti in Odoo. Se devi creare più siti, personalizzare l'aspetto, gestire lingue o collegare servizi esterni, passerai inevitabilmente da questo modello.
Cos'è il modello Website
Il modello Website rappresenta la configurazione di un sito: contiene tutto ciò che determina l'identità e il funzionamento di un portale — dominio, lingue disponibili, elementi di branding, link social e struttura dei menu.
Fa parte dell'app Website ed è il punto di riferimento di ogni sito creato in Odoo. In scenari multi-sito ogni sito ha il proprio record, con dominio, azienda, lingue e tema indipendenti per consentire personalizzazioni per brand o mercati diversi.
Molti altri modelli fanno riferimento al sito tramite il campo website_id. È così che contenuti come pagine, blog o prodotti vengono associati al sito corretto e gestiti separatamente per ciascuna istanza web.
Campi principali del modello
Di seguito trovi i campi principali del modello Website: conoscere il loro scopo semplifica la configurazione e le estensioni.
1. name
Tipo: Char. Richiesto. Nome del sito, visibile nell'interfaccia di amministrazione e nei pannelli di configurazione. Funziona come identificatore leggibile per gli amministratori.
2. sequence
Tipo: Integer. Default 10. Determina l'ordine di visualizzazione quando sono presenti più siti; valori minori vengono mostrati prima.
3. domain
Tipo: Char. Il dominio del sito (es. https://www.miosito.it). Odoo aggiunge automaticamente il protocollo se mancante. Deve essere univoco ed è usato per instradamento e SEO.
4. company_id
Tipo: Many2one (res.company). Richiesto. Collega il sito a una specifica azienda Odoo; in ambienti multi-company i contenuti visibili sono filtrati in funzione di questa relazione.
5. language_ids
Tipo: Many2many (res.lang). Lingue attivate per il sito. I visitatori possono selezionare tra queste; di default include le lingue installate nel sistema.
6. language_count
Tipo: Integer. Computato. Numero di lingue attive: utile per interfacce e filtri amministrativi.
7. default_lang_id
Tipo: Many2one (res.lang). Richiesto. Lingua predefinita al primo accesso; deve appartenere a language_ids.
8. auto_redirect_lang
Tipo: Boolean. Default True. Se attivo, reindirizza il visitatore alla lingua del browser quando disponibile, migliorando l'esperienza internazionale.
9. cookies_bar
Tipo: Boolean. Se True mostra il banner sui cookie, utile per conformità GDPR; Odoo può generare automaticamente la pagina di policy.
10. logo
Tipo: Binary. Logo del sito, mostrato in header e altri punti; se non impostato, viene usato il logo di default di Odoo.
11. favicon
Tipo: Binary. Icona della scheda del browser; Odoo la ridimensiona a 256x256.
12. social_twitter
Tipo: Char. URL dell'account Twitter/X; per default ereditato dall'azienda, usato in footer e condivisioni.
13. social_facebook
Tipo: Char. URL Facebook; segue lo stesso comportamento degli altri campi social.
14. social_linkedin
Tipo: Char. URL LinkedIn del sito o azienda.
15. social_instagram
Tipo: Char. URL Instagram.
16. social_youtube
Tipo: Char. URL YouTube.
17. social_github
Tipo: Char. URL GitHub.
18. social_tiktok
Tipo: Char. URL TikTok.
19. social_default_image
Tipo: Binary. Immagine usata come anteprima nelle condivisioni social; se impostata prevale sul logo per Open Graph e Twitter cards.
20. google_analytics_key
Tipo: Char. Chiave/ID per Google Analytics; una volta impostata Odoo inserisce il relativo script di tracciamento.
21. google_maps_api_key
Tipo: Char. Chiave API per Google Maps, necessaria per funzionalità geografiche e mappe integrate.
22. user_id
Tipo: Many2one (res.users). Richiesto. Utente pubblico del sito, usato per accessi anonimi e portal; di solito ereditato dall'azienda.
23. cdn_activated
Tipo: Boolean. Se True le risorse statiche possono essere servite da una CDN, migliorando performance e scalabilità.
24. cdn_url
Tipo: Char. URL base della CDN; usato quando cdn_activated è attivo.
25. cdn_filters
Tipo: Text. Espressioni regex per riscrivere gli URL statici; per impostazione predefinita include i percorsi statici principali.
26. menu_id
Tipo: Many2one (website.menu). Computato. Punta all'elemento di menu radice del sito, ovvero alla struttura di navigazione principale.
27. homepage_url
Tipo: Char. Percorso della homepage (es. /contatti o /shop). Deve iniziare con una barra (/).
28. custom_code_head
Tipo: Html. Codice personalizzato inserito nell'head della pagina, utile per meta tag, script o snippet di terze parti.
29. custom_code_footer
Tipo: Html. Codice inserito nel footer; ideale per widget di chat, script di monitoraggio o pixel di marketing.
30. robots_txt
Tipo: Html. Contenuto personalizzato del robots.txt per gestire l'indicizzazione e il comportamento dei crawler.
31. theme_id
Tipo: Many2one (ir.module.module). Tema installato associato al sito.
32. auth_signup_uninvited
Tipo: Selection. Opzioni b2b (solo invito) o b2c (registrazione libera): definisce se gli utenti possono registrarsi senza invito.
33. create_date
Tipo: Datetime. Data di creazione del record, gestita automaticamente da Odoo.
34. write_date
Tipo: Datetime. Data dell'ultima modifica, anch'essa gestita automaticamente.
Come si usa questo modello nei processi aziendali
1. Multi-sito e localizzazione
Aziende che gestiscono più marchi o mercati creano un record Website per ogni sito: ciascuno ha dominio, lingua e contenuti separati. I campi website_id applicati a pagine, prodotti e blog garantiscono che ogni elemento appaia solo sul sito corretto.
2. Branding e identità
Logo, favicon e profili social si impostano a livello di sito per consentire rebranding o campagne specifiche. L'immagine di condivisione predefinita migliora la resa grafica dei link sui social.
3. Lingue e SEO
Gestire language_ids e default_lang_id è cruciale per l'usabilità internazionale; l'opzione di redirect automatico alla lingua del browser migliora l'esperienza utente e aiuta nella corretta indicizzazione con hreflang.
4. Performance e CDN
Con l'aumento del traffico attivare una CDN (cdn_activated + cdn_url) permette di scaricare il server dalle risorse statiche; cdn_filters definisce quali percorsi devono essere riscritti verso la CDN.
5. Conformità e Analytics
Banner dei cookie, chiavi di Analytics e snippet personalizzati consentono di rispettare norme sulla privacy e raccogliere dati utili al marketing; robots_txt controlla l'accesso dei motori di ricerca.
Come gli sviluppatori estendono il modello
Gli sviluppatori estendono il modello Website con meccanismi standard di Odoo, in cima ai quali c'è l'ereditarietà dei modelli.
Ereditarietà del modello
In un modulo Python si usa _inherit = 'website' per aggiungere campi, cambiare comportamenti o introdurre vincoli. L'approccio mantiene le modifiche isolate nel modulo e facilita aggiornamenti futuri.
Aggiunta di campi
Nei moduli ereditati si dichiarano nuovi campi scegliendo il tipo corretto (Char, Many2one, Boolean, Integer, Text, Selection). Per scenari multi-sito valutate campi dipendenti dal sito per evitare conflitti tra istanze.
Estensioni in Python
È comune sovrascrivere create, write o unlink per inserire logica custom: ricordate sempre di chiamare super() per non interrompere il comportamento base. Prestate attenzione a user_id e company_id quando i siti vengono creati tramite API o script automatizzati.
Odoo Studio
Odoo Studio permette di aggiungere campi senza scrivere codice: soluzione rapida per esigenze semplici. Per logiche complesse, integrazioni o gestione tramite API è preferibile creare moduli personalizzati per mantenibilità e controllo versione.
Buone pratiche
- In produzione impostate correttamente il dominio per ogni sito: semplifica il routing e favorisce la presenza organica sui motori di ricerca.
- Assicuratevi che default_lang_id sia incluso in language_ids: Odoo effettua questa validazione e bloccherà cambiamenti non coerenti.
- Per i tag di terze parti inserite gli script in custom_code_head o custom_code_footer invece di modificare i template core, così riducete il rischio di conflitti in aggiornamenti futuri.
- Per integrazioni API usate XML-RPC o JSON-RPC; il modello Website è esposto e va mappato correttamente con website_id quando si sincronizza contenuto o strutture fra sistemi.
- Per campi personalizzati seguite il naming convenzionale con prefissi x_ o il prefisso del modulo per evitare collisioni con futuri campi di Odoo.
Errori comuni
- Creare domini duplicati: il campo domain è unico e il sistema impedisce record con lo stesso valore.
- Dimenticare user_id nella creazione di un sito via API: è un campo obbligatorio e la sua assenza causa errori.
- Impostare homepage_url senza la barra iniziale: Odoo valida il formato e segnala l'errore.
- Attivare cdn_activated senza definire un cdn_url valido: le risorse statiche potrebbero non essere caricate correttamente.
- Sovrascrivere metodi core senza chiamare super(): rischio di rompere funzionalità altrui o complicare aggiornamenti futuri.
Conclusione
Il modello Website è il fulcro della configurazione dei siti in Odoo: raggruppa dominio, lingue, elementi di branding e impostazioni operative. Conoscere i suoi campi e le relazioni con gli altri modelli facilita configurazione, personalizzazione e integrazione.
Sia che tu mappi esigenze multi-sito come consulente funzionale, sia che tu sviluppi moduli personalizzati, una buona conoscenza del modello Website ti farà risparmiare tempo ed evitare errori comuni.
Hai bisogno di assistenza per la tua implementazione Odoo?
Dasolo affianca le aziende nell'implementazione e ottimizzazione di Odoo: ci occupiamo di sviluppo, integrazioni API e personalizzazioni, con esperienza approfondita sull'architettura dati e modelli come Website.
Se ti serve supporto per implementazione Odoo, configurazione multi-sito o integrazioni, possiamo aiutarti a progettare e realizzare la soluzione più adatta. Prenota una demo per parlare del tuo progetto.