Fr:Snipets, chunks, et autres TVs: késako?

From MODx Wiki

Jump to: navigation, search
à vérifier Cet article est une ébauche. Vous pouvez partagez vos connaissances en l'améliorant!

Une des forces de MODx est de permettre de réutiliser des éléments d'une page à l'autre d'un site, sans avoir à modifier le coeur du CMS (le core pour les programmeurs).

Parmi les mécanismes proposés par MODx pour assurer cette modularité, on trouve les templates, les snippets, les chunks et les template-variables (TVs).

Contents

Concepts de base

Les templates

Les templates (modèles en français) sont des documents (X)HTML qui décrivent la structure des pages de votre site. Un site peut utiliser un ou plusieurs modèles.

Les chunks

Les chunks sont des bouts de code ré-utilisables. Leur syntaxe est simple : {{mon_chunk}}

Les chunks sont utiles pour tous les éléments que vous avez besoin de ré-utiliser : entete, pied de page mais aussi d'autres éléments (par exemple un chemin de navigation). Ils sont l'équivalent des includes en PHP. L'avantage est que vous éditez une seule fois un chunk et cette modification se répercute sur toutes vos pages. Les chunks peuvent contenir du HTML ou du Javascript, mais pas de PHP (les snippets ont cette vocation). Ils peuvent contenir des appels de snippets, des variables de modèles ou encore des placeholders.

Dans MODx, les chunks sont aussi une composante clé du templating des snippets. Par exemple, si je créé un blog avec le snippet Ditto, je vais créer le template de mes billets en ajoutant le paramètre permettant de définir quel chunk doit être utilisé comme template : &tpl=`mon_template_blog`

Les snippets

Les snippets sont des bouts de code PHP qui sont interprétés par le serveur et dont le résultat (output) est inséré dans le document envoyé au navigateur client. Pour insérer un snippet dans le document, on rédige un "appel de snippet", c'est à dire une invocation du snippet dans le document. La syntaxe est simple : [[snippet]] permet d'appeler un snippet et de mettre en cache le résultat obtenu, et [!snippet!] permet d'appeler un snippet sans mettre en cache le résultat obtenu.

Les snippets acceptent des paramètres qui sont autant de variables utilisables comme indiqué dans leur documentation. Pour utiliser les paramètres, il faut initialiser l'appel par ?, chaque paramètre précédés du & et chaque valeur encadrée du ` (backtick). . Par exemple si je veux afficher un menu sur un niveau, listant les documents enfants du document 15 je vais utiliser le snippet Wayfinder (qui permet de générer des menus) et écrire :
[[Wayfinder? &startID=`15` &level=`1`]]

Les TVs

Les variables de modèles (TVs, pour "template variables" en anglais) sont des variables utilisables dans les templates MODx. MODx prédéfinit un certain nombre de TVs mais il est possible au designer d'en rajouter autant qu'il le souhaite.

Ces variables personnalisées sont associées à un (ou plusieurs) modèle(s). Lors de l'édition du document, MODx va charger les variables de modèles associés au template utilisé par le document et vous pouvez alors en modifier la valeur. On peut donc assimiler les variables de modèles personnalisés à des champs custom, avec quelques plus :

  • vous pouvez spécifier le type de la variable de modèle (texte, nombre, date, image, url, texte riche...)
  • vous pouvez définir la valeur par défaut d'une TV
  • vous pouvez lier celle-ci à un fichier, un autre document, une autre base de données via les @bindings

Les @bindings

Que sont les @bindings ?

A rédiger.

@FILE

A rédiger.

@DIRECTORY

A rédiger.

@DOCUMENT

A rédiger.

@CHUNK

A rédiger.

@INHERIT

A rédiger.

@SELECT

A rédiger.

@EVAL

A rédiger.

Les placeholders

A rédiger.

Où ça se complique

Ce qui fait la complexité (et la puissance) de ce système est que les différents éléments peuvent interagir les uns avec les autres.

Dans les chunks et les templates

Ainsi, dans un chunk ou un template on peut:

  • faire appel à un snippet: (la valeur sera mise dans le cache si celui-ci est activé)
    [[MonSnippet]]
    ou (la valeur est mise à jour à chaque accès à la page, ignorant le cache)
    [!MonSnippet!]
  • récupérer certaines valeurs calculées par un snippet déjà utilisé sur la même page:
    [+wf.classes+]
    Note : Attention cela suppose que le snippet dont on souhaite récupérer la valeur par cette méthode ai défini un placeholder
  • inclure le contenu (la valeur) associée à une TV pour le document en cours. Par ex:
    [*content*]

Dans les snippets

Tout aussi fort, un snippet peut aussi:

  • Exécuter un autre snippet:
    $modx->runSnippet('MonSnippet');
  • Charger un chunck:
    $chunk_content = $modx->getChunk('MonChunk');
  • Récupérer la valeur d'une variable de document:
    $var_content = $modx->documentObject['variable-name'];
Personal tools