Bon usage du content_view_gui
Bonjour à tous,
l'erreur principale vient du mélange entre "objet" et "noeud". En effet, eZ Publish utilise ses 2 notions pour gérer son contenu.
Petit rappel :
Un objet représente une instance d'une classe telle que définie dans l'interface d'administration : un article par exemple.
Les objets ne sont pas organisés entre eux. Ils sont stockés "à plat".
Un noeud sert à mettre en place la structure arborescente de votre site. A chaque noeud, nous attacherons donc un objet et nous obtiendrons un arbre de contenus pour organiser notre site.
Pourquoi ce système ?
Cette organisation peut sembler un peu complexe mais elle est finalement très puissante. En effet, par cette division entre noeud et objets vous pouvez faire de la multipublication et ainsi avoir le même article dans plusieurs espaces de votre site sans jamais dupliquer l'information.
*_view_gui
Lorsque vous souhaitez visualiser un contenu (noeud, objet, attribut d'objet...) vous avez des fonctions utilitaires qui vont charger dynamiquement la template nécessaire en fonction du contexte (classe de l'objet, nature de l'attribut, object id, node id...).
Les 3 principales fonctions étant :
node_view_gui pour les noeuds
content_view_gui pour les objets
attribute_view_gui pour les attributs
Les templates associées
Pour node_view_gui, eZ Publish va chercher à charger la template node/view/<type de vue>.tpl. Le mécanisme d'override vous permettant de choisir la template chargée.
Pour content_view_gui, c'est content content/view/<type de vue>.tpl.
Pour attribute_view_gui, ce sera légèrement différent avec content/datatype/view/<type d'attribut>.tpl
Dans le cas présenté
Au final, dans le cas présenté :
{content_view_gui content_object=$node.data_map.typelop.object view=full_lop}
La règle d'override devra être de type
[full_lop_lop]
Source=content/view/full_lop.tpl
MatchFile=content/full/full_lop_lop.tpl
Subdir=templates
Match[class_identifier]=lop
Pour plus d'infos :
http://ez.no/doc/ez_publish/technica...ntent_view_gui
A noter
Il ne faut pas oublier que lorsque vous utilisez les objets, vous n'avez plus de lien avec l'arborescence. $object.url_alias n'existe donc pas. Il faudra dans les templates de type content/view/<..>.tpl faire appel à $object.main_node.url_alias afin d'avoir l'URL de l'emplacement principal.
A titre perso, je préfère toujours utiliser des node_view_gui afin de ne pas mélanger. Par contre les content_view_gui sont très utiles dans le cas de l'insertions d'objets (images, vidéos...) directement dans une zone de texte riche avec le online editor.