Ma cave sur eZ Publish : Les Classes (Partie 1)
- Publié le 09 Février 2009
- 14 commentaire(s)
- Catégorie : Technologies Web
La création d'une cave sur eZ Publish révèle certes un grand nombre de pathologies (névrose, alcoolisme, autisme), mais révèle également la capacité d'eZ Publish à structurer et à gérer n'importe quel type de contenu.
eZ Publish n'est en effet pas dédié exclusivement aux classiques sites Web (rubriques, articles, news, blogs, commentaires...), mais permet de développer des publications de types bases de données, d'habitude réservées aux FrameWorks de développements traditionnels. C'est pourquoi eZ Publish se classe plutôt dans la catégorie des CMF (Content Management FrameWork) plutôt que des CMS (Content Management Solution).
Bien sûr, eZ Publish n'est pas adapté à toutes les situations de développements. De nombreux critères sont à considérer, comme la volumétrie de données, la complexité relationnelle, le système d'information à exploiter, les capacités d'hébergement, etc. Cela fera sûrement l'objet d'un prochaine billet. Pour l'instant concentrons nous sur la construction de la cave.
Concevoir son modèle de données
La modélisation de la cave exploite assez strictement l'organisation administrative des régions viticoles, des domaines, des appellations et des cuvées. Petite synthèse pour les néophytes :
- La France est découpée en régions viticoles (Languedoc, Bordeaux, Loire, etc.)
- Chaque région possède :
- Une liste d'appellations (voir mon article sur les appellations)
- Une liste de domaines viticoles
- Chaque domaine viticole propose :
- Une liste de cuvées (plusieurs types de bouteilles en quelques sorte)
- Chaque cuvée est caractérisé par :
- Une couleur (Rouge, Blanc Sec, Blanc Doux, Rosé, Vin Doux Naturel)
- Un prix
- Un stock (Si si je gère mon stock !)
- Une notation personnelle (Non évalué, Passable, Moyen, Bon, Excellent, Exceptionnel)
- Une appellation de sa région
Voici une représentation façon "Modèle Relationnel de Données", qui permet de se faire une idée de la modélisation d'une telle application sur un mode de développement traditionnel.
Transposition en modèle de classes eZ Publish
Classe "Cave"
Cette classe me permet de gérer l'affichage (overrides de templates), le cache et les droits pour l'accueil de la rubrique "ma Cave". Il est toujours conseillé de créer une classe spécifique lorsqu'un affichage est spécifique. Cela évite la surexploitation de la classe "Folder", et les surcharges sur les node_id.
Les noeuds de la classe "Cave", ne peuvent accueillir comme enfants que des noeuds de la classe "Cave Région".
| Attributs | Datatype |
|---|---|
| Titre | Ligne de texte |
| Nombre dernières acquisitions | Nombre entier |
| Nombre items toplist | Nombre entier |
Classe "Cave Région"
Les noeuds de la classe "Cave Région", ne peuvent accueillir comme enfants que des noeuds de la classe "Cave Région", et de la classe "Cave Appellation"
| Attributs | Datatype |
|---|---|
| Titre | Ligne de texte |
| Localisation | Google Maps |
Classe "Cave Appellation"
Les noeuds de la classe "Cave Appellation", ne peuvent accueillir comme enfants que des noeuds de la classe "Cave Domaine".
| Attributs | Datatype |
|---|---|
| Titre | Ligne de texte |
Classe "Cave Domaine"
Les noeuds de la classe "Cave Domaine", ne peuvent accueillir comme enfants que des noeuds de la classe "Cave Cuvée".
| Attributs | Datatype |
|---|---|
| Titre | Ligne de texte |
| Texte | Bloc XML |
| Adresse | Bloc de texte |
| URL | URL |
| Localisation | Google Maps |
Classe "Cave Cuvée"
Les noeuds de la classe "Cave Cuvée" n'ont pas d'enfant, mais sont en relations avec les objets de la classe "Cave Appellation", "Cave Couleur" et "Cave Rating"
| Attributs | Datatype |
|---|---|
| Titre | Ligne de texte |
| Texte | Bloc XML |
| Année | Nombre entier |
| Stock | Nombre entier |
| Prix | Nombre entier |
| Couleur | Relation d'objet "unique" (vers classe "Cave Couleur") |
| Rating | Relation d'objet "unique" (vers classe "Cave Rating") |
| Appellation | Relation d'objets "multiple" (vers classe "Cave Appellation") |
Classe "Cave Couleur"
Les noeuds de ses objets n'ont pas d'affichages spécifiques, ils servent uniquement pour les filtres et les relations d'objets. Ils sont donc rangés dans un noeud de la classe "Folder" non visible sur le site.
| Attributs | Datatype |
|---|---|
| Titre | Ligne de texte |
Classe "Cave Rating"
Les noeuds de ses objets n'ont pas d'affichages spécifiques, ils servent uniquement pour les filtres et les relations d'objets. Ils sont donc rangés dans un noeud de la classe "Folder" non visible sur le site.
| Attributs | Datatype |
|---|---|
| Titre | Ligne de texte |
Le résultat en Back Office
En Back Office, on obtient une hiérarchie relativement facile à manipuler. Il faut noter quelques subtilités :
- La personnalisation des icônes permet une meilleure lisibilité
- Les appellations ne sont pas visibles dans l'arborescence, puisque rarement manipulés. On les aperçoit par contre dans le tableau de contenu, au même niveau que les domaines d'une même région.
Sélectionner les classes visibles dans le TreeMenu
Fichier "extension/[monextension]/settings/siteaccess/[admin_siteaccess]/contentstructuremenu.ini.append.php" :
<?php /* #?ini charset="utf-8"? [TreeMenu] Dynamic=enabled ShowClasses[] ShowClasses[]=folder ShowClasses[]=cave ShowClasses[]=cave_region ShowClasses[]=cave_domaine ShowClasses[]=cave_cuvee */ ?>
Sélectionner les icônes associées aux classes
Fichier "extension/[monextension]/settings/siteaccess/[admin_siteaccess]/icon.ini.append.php" :
<?php /* #?ini charset="utf-8"? [IconSettings] Theme=crystal-admin Size=normal [ClassIcons] ClassMap[] ClassMap[folder]=filesystems/folder.png ClassMap[cave]=apps/package.png ClassMap[cave_appelation]=filesystems/folder.png ClassMap[cave_domaine]=apps/package_network.png */ ?>
- Tags :
- eZ Publish
- Object Relations
Que boire avec ce billet ?
Domaine le Mont - Blanc Moelleux 2004
| Région : | Loire |
| Appellation : | Bonnezeaux |
| Domaine : | Domaine le Mont |
| Couleur : | |
| Stock : | 0 |
| Notation : | |
| Prix : | 8 € |
| Commentaire(s) : | 0 Commentaire(s) |
Une magnifique cuvée, qui impressionne par son équilibre et son élégance. Moins concentré et sirupeux que les classiques du Bonnezeaux, on profite ainsi de toute la richesse aromatique de cette appellation, sans lourdeurs sucrées. Ce vin séduira et réconciliera tous les dégustateurs avec les vins de Loire et les liquoreux en général.
la classe
j'y crois pas ! t'as mis ton modèle de données sur ton blog !
sinon super les explications, meme moi, j'ai compris ![]()
par contre, pourquoi le Domaine Le Mont à boire avec ce billet ? c'est randomize ?
le poutou
intéressant
Très intéressant ton modèle de donnée et son implémentation en back Office.
Je me demande juste à quel point c'est facile de géré ton stock avec... tu pourrai détailler?
randomize des cuvées
Isa, les cuvées ne sont pas choisies au hasard. C'est moi qui les sélectionne manuellement, une sorte de sommelier 2.0
Gestion du stock
La gestion du stock est certes un peu laborieuse. Elle est gérée dans la classe "Cave Cuvée", ce qui nécessite l'édition de l'objet à chaque mise à jour. J'ai cependant un peu modifié les vues du back office pour me permettre d'atteindre plus facilement les cuvées.
Mais bon, j'ai en projet une interface frontale spécifique pour les modifier en AJAX. Un futur billet en préparation ![]()
Ez et Ajax
Pour le coup la réalisation d'une tel fonctionnalité m'intéresse au plus haut point. Je me demande à quel point c'est compliquer à mettre en place
Implémenter de l'AJAX sur eZ
Ce billet décrit un exemple assez basique, mais qui permet de comprendre la logique : http://gandbox.fr/Blogs/Technolog...b/Mes-amis-les-SPAMS-de-commentaires
Il ne s'agit pas de la seule façon de procéder. Concernant les bonnes pratiques il faut retenir :
- Que l'AJAX ne fait qu'ajouter un confort (le mécanisme sans JS doit rester intacte)
- Que les vues XML générées par eZ peuvent être fabriquées de différentes façon (layout/set/ ou override du pagelayout selon le besoin), en exploitant ou non les modules standards (la création de modules est souvent nécessaire pour gérer certains traitements spécifiques, en fonction des fonctionnalités AJAX implémentées).
Datatype object relation
Bonjour,
Merci pour ce site extraordinaire, étonnant.
On trouve très de docs en français sur ez-publish et je suis en train de découvrir.
Notamment je bloque sur le type object-relation (au singulier).
je souhaiterai moi aussi créer un classe qui associe trois de mes autre classes (comme ta cuvée).
Mais quand je choisis un attribut object relation ez-publish me demande de choisir un item par défaut. Quand je clique dessus je n'ai pas le choix de mes toutes nouvelles classes que je veux y associer. Bref je ne vois pas comment on choisis la classe que doit avoir l'objet "relationné".
Par contre si je choisissais objects relations (là je comprend "un peu mieux" je crois, j'ai un choix de classe que je peux indiquer. Doncje ne dois pas comprendre ce que signifie cet item par défaut. Et ne comprend pas pourquoi on me propose pas l'ensemble des classes disponibles).
Pourrais-tu éclairer mes ténébres ? Je t'en serais éternellement reconnaissante......
Merci beaucoup d'avance...
Object-relation au singulier
Catherine,
Merci pour ces encouragements. Pour information, il existe d'autres bloggers francophones, listés sur le planet RSS : http://www.planet-ezpublish.fr/
Concernant les Object-relation, le paramètre "Elément de sélection par défaut" permet de définir le noeud parent par défaut contenant la liste des objects à associer. Il n'est par contre pas possible de limiter les relations sur des objets de telle ou telle classes, contrairement au datatype Object-relations (au pluriel). Ta confusion provient peut être d'un manque de compréhension sur les concepts d'eZ, à savoir la différence entre un noeud, un objet, un classe ?
Il me faudrait plus de détail sur les classes, et l'organisation de l'arbre de contenu pour pouvoir te conseiller, mais sinon voici un alternative à connaître : Il est possible de créer un Object-relations, interfacé sous forme de "liste déroulante", comme pour un Object-relation, tout en profitant des filtres sur les classes, alors autant en profiter
Merci
Merci beaucoup de m'avoir répondu.
Je pense qu'effectivement mes pb viennent d'incompréhensions des concepts de base d'ez-publish. Mais ta réponse m'éclaire (un peu).
En fait je pense que j'avais besoin de l'objet object relations et non de l'autre. Le simple pluriel prête à confusion en faisnt croise que c'est la même chose ... en multiple, alors que non.
En fait, j'aurais besoin d'un petit cours je crois parce que j'ai plein de questions. Moyennant finance si besoin.
Je serais présente en principe lors du rdv du 9 avril à Paris, peut-être trouverai-je quelqu'un.
Là je bute sur le concept de noeud et d'arborescence des noeuds.
Sur le site pré-installé (lorsqu'on installe ez-publish) à quoi correspond le noeud Home, à la page d'accueil ?
Peut-on en avoir un autre au même niveau ?
Pour l'instant je n'ose rien modifier à ce qui existe puisque ça me sert d'exemple. Il faudrait que j'installe une deuxième instance poru bien faire.
En tout cas re-bravo. Je trouve quand même moyennes les infos qu'on trouve sur ez-publish, en français en tout cas. Et la littérature .......... introuvable.
Merci encore
Débuter sur eZ en Français
Catherine,
Il n'est effectivement pas facile de trouver des documentations en Français. Il existe une traduction française de la documentation sur le site : http://luxpopuli.fr/eZ-Publish
Il est difficile de naviguer sur ce site, il faut toujours cliquer sur "Cliquer ici pour afficher le contenu"... Mais ca peut bien aider pour démarrer.
- Pour débuter en Français : http://luxpopuli.fr/eZ-Publish/Pour-debuter
- La documentation en Français : http://luxpopuli.fr/eZ-Publish/Documentation-eZ-publish
Bon explication, mais comment gérer les listes ?
Bjour,
Je trouve l'explication bien réalisée, avec les images en plus, ça agrémente le tout.
Je vais bientôt basculer vers ezpublish, sachant que je suis actuellement en dev spécifique php/mysql.
Voici ma question : comment gérer la mise à jour des listes ? (modification suppression/...)
merci
Gestion des listes associées
@Mathieu :
Tu parles des listes associés ? Par exemple la liste des appellations associables à une cuvée ?
Si tu regardes bien la capture d'écran, tu remarqueras que les appellations sont aussi des objets, tout comme les cuvées. Il se manipulent donc de la même façon, par ajout de noeuds / objets dans l'arbre de contenus.
Gestion des listes
@gandbox
Salut,
En prenant l'exemple de la liste des appellations associables à une cuvée, je vois les cas de figure suivant :
- Tu ajoutes un terme dans la liste : pas de soucis celui ci est rajouté immédiatement à la liste
- Tu modifies un terme de la liste (son intitulé) : le terme est remplacé dans les tables appelantes ?
- Tu supprimes un terme de la liste : Que se passe t il ? y a t il une vérification dans les tables qui l'utilisent ou alors le terme est il supprimé et la référence se retrouve dans le vide ?
Merci pour tes infos.
En fait avec Ezpublish, peut on créer une structure de base sql avec beaucoup de relations à gérer avec des listes d'autorités ?
Concepts eZ Publish
@Mathieu :
Il faudrait que tu investigues les concepts de gestion de contenu d'eZ Publish : http://ez.no/doc/ez_publish/technical_manual/4_x/concepts_and_basics
Tu y découvriras les fondamentaux, surtout dans la gestion des classes et des datatypes, qui permettent de modéliser toutes sortents de gestion de listes associées (relations d'objets unique, relations d'objets multiples, listes d'options, keywords...)
