Introduction
Dans Odoo, les modèles définissent comment les données sont structurées et stockées dans la base de données. Chaque élément de données commerciales avec lequel vous travaillez vit dans un modèle.
Les modèles Odoo sont la base de l'architecture des données. Ils définissent les champs Odoo, les relations et la logique commerciale. Comprendre comment les modèles fonctionnent est essentiel tant pour les développeurs que pour les consultants fonctionnels.
Cet article se concentre sur le modèle blog.post. Il alimente la fonctionnalité de blog sur les sites Web Odoo. Que vous créiez du contenu via l'interface utilisateur, automatisiez des publications via l'API ou personnalisiez l'expérience du blog, vous travaillerez avec ce modèle.
Qu'est-ce que le modèle blog.post
Le modèle blog.post représente un article de blog unique dans Odoo. Chaque enregistrement est un post qui apparaît sur le blog de votre site web.
Ce modèle dans Odoo fait partie du module website_blog. Il fonctionne en collaboration avec blog.blog (le conteneur de blog) et blog.tag (pour la catégorisation). Lorsque vous créez ou modifiez un article de blog dans Odoo, vous créez ou mettez à jour un enregistrement blog.post.
Le modèle hérite de plusieurs mixins. Il utilise le mixin mail.thread pour le chatter et les abonnés. Il utilise le mixin website.published.mixin pour la logique de publication et de dépublication. Comprendre cet héritage de modèle Odoo aide lors de l'extension du modèle.
blog.post n'est pas un modèle abstrait ou transitoire d'Odoo. C'est un modèle stocké régulier. Tous les posts sont persistés dans la base de données et peuvent être interrogés via l'API.
Champs clés dans le modèle
Voici les champs Odoo les plus importants dans le modèle blog.post. Comprendre ceux-ci vous aidera à travailler efficacement avec le contenu du blog.
1. nom
Type : Char. Ce champ stocke le titre du post de blog. Il est requis et affiché dans les listes, les formulaires et sur le site web. Le nom apparaît dans l'onglet du navigateur et dans les résultats de recherche.
2. blog_id
Type : Many2one (blog.blog). Lie le post à son conteneur de blog. Chaque blog.post appartient exactement à un blog. Utilisez ceci pour organiser les posts en différentes sections de blog (par exemple, Actualités, Mises à jour de produits, Guides techniques).
3. sous-titre
Type : Char. Un court sous-titre ou slogan. Affiché sous le titre sur la page du post et parfois dans les listes de blogs. Utile pour le SEO et la lisibilité.
4. contenu
Type: Html. Le corps principal de l'article. Stocke du contenu HTML riche incluant du texte, des images et des extraits de site Odoo. C'est le champ de contenu principal.
5. teaser
Type: Texte. Teaser généré automatiquement à partir du contenu. Odoo extrait un aperçu à afficher dans les listes de blogs. En lecture seule et calculé.
6. teaser_manual
Type: Texte. Remplacement manuel du teaser. Lorsqu'il est défini, cela remplace le teaser généré automatiquement dans les listes de blogs. À utiliser pour des résumés personnalisés qui diffèrent du paragraphe d'ouverture.
7. author_id
Type: Many2one (res.partner). L'auteur du post. Lien vers un contact ou un utilisateur. Affiché sur le post et dans les listes. Utile pour les blogs multi-auteurs.
8. author_name
Type: Char. Nom d'affichage calculé de l'auteur. Retombe sur le nom d'affichage de l'auteur lorsque author_id est défini. En lecture seule.
9. author_avatar
Type: Binaire. Image de l'avatar de l'auteur. Affiché à côté du nom de l'auteur sur le post. Optionnel.
10. is_published
Type: Booléen. Indique si le post est publié et visible sur le site web. Champ calculé en lecture seule. Utilisez website_published pour modifier cela.
11. website_published
Type: Booléen. Le champ modifiable pour publier ou dépublier. Défini sur True pour rendre le post visible. Défini sur False pour le brouillon. Cela influence is_published.
12. post_date
Type: Datetime. La date de publication affichée aux visiteurs. Utilisé pour le tri et l'affichage. Peut être définie dans le futur pour les posts programmés.
13. published_date
Type: Datetime. La date réelle à laquelle le post a été publié. Définie automatiquement lorsque website_published devient True. Utile pour l'analyse.
14. active
Type: Booléen. Indicateur de suppression douce. Lorsque False, l'enregistrement est archivé et caché des vues par défaut. Les posts ne sont pas physiquement supprimés pour préserver l'historique.
15. tag_ids
Type: Many2many (blog.tag). Étiquettes pour la catégorisation. Utilisé pour filtrer et regrouper les posts. Les étiquettes peuvent avoir des catégories pour une organisation hiérarchique.
16. visits
Type : Entier. Compteur de visites. En lecture seule. Incrémenté lorsque les visiteurs consultent le post. Utilisé pour l'analyse et le contenu populaire.
17. website_url
Type : Char. Chemin URL complet vers le post sur le site web. En lecture seule. Format : /blog/{blog-seo-name}-{blog-id}/{post-seo-name}-{post-id}.
18. cover_properties
Type : Texte. Chaîne JSON stockant les propriétés de l'image de couverture. Contrôle le positionnement, le superposition et l'affichage de l'image de couverture du blog. Utilisé par le frontend.
19. header_visible
Type : Booléen. Indique s'il faut afficher l'en-tête du site web sur la page du post. Utile pour les posts en pleine largeur ou intégrés.
20. footer_visible
Type : Booléen. Indique s'il faut afficher le pied de page du site web sur la page du post. Souvent associé à header_visible.
21. seo_name
Type : Char. Slug d'URL optimisé pour le SEO. Détermine le chemin de l'URL. Exemple : my-post-title devient /blog/my-blog-1/my-post-title-1. Généré automatiquement à partir du nom s'il est vide.
22. website_meta_title
Type: Char. Titre méta pour les moteurs de recherche. Affiché dans l'onglet du navigateur et les résultats de recherche. Important pour le SEO.
23. website_meta_description
Type: Text. Description méta pour les moteurs de recherche. Affichée dans les extraits de recherche. Limitez à 150-160 caractères pour un meilleur affichage.
24. website_meta_keywords
Type: Char. Mots-clés méta. Moins importants pour le SEO aujourd'hui mais encore utilisés par certains systèmes.
25. create_date
Type: Datetime. Stocke la date à laquelle l'enregistrement a été créé. Géré automatiquement par Odoo. Utile pour les rapports et les audits.
26. create_uid
Type: Many2one (res.users). Utilisateur qui a créé l'enregistrement. Défini automatiquement. Lecture seule.
27. write_date
Type: Datetime. Date de dernière modification. Géré automatiquement. Aide à suivre quand le contenu a été mis à jour pour la dernière fois.
28. write_uid
Type : Many2one (res.users). Utilisateur qui a modifié l'enregistrement en dernier. Lecture seule.
29. display_name
Type : Char. Nom d'affichage calculé. Utilisé dans les menus déroulants many2one et les résultats de recherche. Lecture seule.
30. website_id
Type : Many2one (website). Dans les configurations multi-sites, le site web auquel ce post appartient. Optionnel ; lorsqu'il est vide, le post peut apparaître sur tous les sites web.
Comment ce modèle est utilisé dans les flux de travail commerciaux
1. Marketing de contenu et SEO
Les équipes marketing créent des enregistrements blog.post pour publier des articles. Elles utilisent website_meta_title, website_meta_description et seo_name pour optimiser la recherche. Le champ de contenu contient l'article complet. Les tags aident à organiser le contenu par sujet.
2. Sites Web Multi-Blogs
Les entreprises gèrent plusieurs blogs (Actualités, Mises à jour de produits, Docs techniques). Chaque blog.blog a de nombreux enregistrements blog.post. Le champ blog_id lie chaque post à sa catégorie. Les visiteurs naviguent par blog et filtrent par tag.
3. Contenu piloté par API
Les intégrations créent des enregistrements blog.post via XML-RPC ou JSON-RPC. Les cas d'utilisation incluent l'importation depuis un CMS, la synchronisation depuis un blog sans tête, ou l'automatisation de la création de posts depuis des systèmes internes. Le modèle API dans Odoo expose blog.post pour créer, lire, mettre à jour et rechercher.
4. Publication programmée
Définissez post_date sur une date future et website_published sur True. Odoo affiche le post lorsque la date est atteinte. Utile pour les calendriers de contenu et les campagnes temporisées.
5. Multi-Auteur et Collaboration
Le champ author_id et le mixin mail.thread supportent la collaboration. Les auteurs sont assignés par post. Les abonnés sont notifiés des changements. Chatter permet des commentaires internes avant la publication.
Comment les développeurs étendent ce modèle
Les développeurs étendent blog.post en utilisant plusieurs modèles. L'héritage de modèle Odoo est le principal mécanisme.
Héritage de Modèle
Utilisez _inherit = 'blog.post' pour étendre le modèle. Ajoutez de nouveaux champs Odoo, remplacez des méthodes ou ajoutez des contraintes. Le modèle hérité dans Odoo garde vos modifications dans un module séparé pour des mises à jour faciles. blog.post hérite de mail.thread et website.published.mixin ; comprenez-les lors de la substitution.
Ajout de Champs
Définissez de nouveaux champs Odoo dans votre modèle hérité. Utilisez le bon type de champ : Char, Many2one, Boolean, Integer, Text, Selection. Pour les métadonnées personnalisées (temps de lecture, catégories personnalisées), ajoutez des champs et exposez-les dans les vues. Utilisez le préfixe x_ pour les champs personnalisés afin d'éviter les conflits.
Extensions Python
Remplacez create, write ou unlink pour ajouter de la logique. Utilisez super() pour appeler l'original. Faites attention à website_published et post_date. Le modèle a des champs calculés provenant du mixin website. Remplacez _compute_website_url si vous avez besoin d'une logique d'URL personnalisée.
Odoo Studio
Odoo Studio vous permet d'ajouter des champs sans code. Bon pour des personnalisations rapides comme des métadonnées supplémentaires. Pour une logique complexe, des intégrations API ou des vues personnalisées, des modules personnalisés sont plus maintenables. Le modèle API dans Odoo (blog.post) est entièrement exposé via XML-RPC et JSON-RPC.
Meilleures pratiques
- Définissez website_meta_title et website_meta_description pour chaque article. Ils améliorent la visibilité SEO.
- Utilisez teaser_manual pour les listes de blogs lorsque le teaser généré automatiquement ne convient pas. Les teasers personnalisés fonctionnent souvent mieux.
- Définissez seo_name explicitement pour les articles importants. Évitez les caractères spéciaux qui peuvent casser les URL.
- Lors de la création d'intégrations API, utilisez website_published pour publier. Ne comptez pas sur is_published pour les écritures.
- Utilisez tag_ids pour une catégorisation cohérente. Créez des tags à l'avance et réutilisez-les dans les articles.
Erreurs courantes
- Écrire sur is_published au lieu de website_published. is_published est en lecture seule. Utilisez toujours website_published pour publier ou dépublier.
- Oublier de définir blog_id. C'est requis. Les articles sans blog ne s'afficheront pas correctement.
- Laisser website_meta_description vide. Les moteurs de recherche peuvent utiliser du contenu aléatoire de la page. Fournissez toujours une description claire de 150 à 160 caractères.
- Surcharger des méthodes de base sans appeler super(). Cela peut casser le comportement du mixin de site ou de mail.thread.
- Créer des valeurs seo_name en double au sein du même blog. Les URL peuvent entrer en conflit. Laissez Odoo générer automatiquement ou assurez-vous de l'unicité.
Conclusion
Le modèle blog.post est central au blog du site Odoo. Il stocke chaque article, son contenu, ses métadonnées et son état de publication. Comprendre ses champs Odoo et comment il se rapporte à blog.blog et blog.tag vous aidera à configurer, personnaliser et intégrer le contenu du blog efficacement.
Que vous soyez un consultant fonctionnel gérant du contenu ou un développeur construisant des intégrations API, une bonne compréhension de blog.post vous fera gagner du temps et évitera des erreurs.
Besoin d'aide pour votre mise en œuvre Odoo ?
Dasolo aide les entreprises à mettre en œuvre, personnaliser et optimiser Odoo. Nous sommes spécialisés dans les intégrations API et le développement Odoo. Notre équipe a une grande expérience de l'architecture des données Odoo et des modèles comme blog.post.
Si vous avez besoin d'aide pour votre mise en œuvre Odoo, vos modules personnalisés ou vos intégrations, nous sommes là pour vous aider. Réservez une démo pour discuter de votre projet.