TYPO3 et la notion de rootline

De Typo3 CMS / Documentation Typo3 / Support Typo3.

La notion de « rootline » dans TYPO3 est comme son nom l'indique le chemin vers la racine, typiquement cela correspond au fil d'ariane qu'on utilise sur la plupart des sites Web.

L'objet HMENU prévu à cet effet dans TYPO3 comporte justement la propriété suivante : special = rootline.

Voici une traduction de la définition de rootline donnée par Dmitri Dulepov :

« Rootline est le chemin complet de la page courante jusqu'à la page racine. Rootline en FE s'arrête quand le gabarit TypoScript racine est atteint. »

Plus globalement, « rootline » est un tableau représentant les données de la table « pages » présent partout dans l'arborescence de TYPO3, accessible notamment via $GLOBALS['TSFE']->rootLine (attention ici au L majuscule).

La liste des champs récupérés est la suivante :

  • pid
  • uid
  • t3ver_oid
  • t3ver_wsid
  • t3ver_state
  • t3ver_swapmode
  • title
  • alias
  • nav_title
  • media
  • layout
  • hidden
  • starttime
  • endtime
  • fe_group
  • extendToSubpages
  • doktype
  • TSconfig
  • storage_pid
  • is_siteroot
  • mount_pid
  • mount_pid_ol
  • fe_login_mode

On peut déjà noter ici que tous les champs de la table « pages » n'y sont pas présents, en effet la table « pages » comprend par défaut 64 champs.

Or, en TypoScript si on veut récupérer des champs de ce tableau, tous ces champs ne sont pas disponibles par défaut.

Ajout de champs spécifiques dans le rootline

Afin de pouvoir récupérer d'autres champs dans le rootline, il suffit de les ajouter dans le fichier « localconf.php » de la manière suivante :

$TYPO3_CONF_VARS['FE']['addRootLineFields'] .= 'subtitle, tx_myExt_fieldname';

Attention, si le site est multilingue, il faut de plus ajouter cette ligne :

$TYPO3_CONF_VARS[FE][pageOverlayFields] .= 'subtitle, tx_myExt_fieldname';

Dans cet exemple, on ajoute les champs « Sous-titre » (subtitle) ainsi qu'un champ nommé « fieldname » provenant de l'extension « myExt », cette dernière étendant bien entendu la table « pages ».

Dans le cas d'un site multilingue, étant donné que dans ce cas TYPO3 utilise une requête avec jointure, si on ne renseigne pas la partie «  pageOverlayFields » on ne peut pas récupérer sa valeur dans une traduction de page.

n.b. : il est préférable d'utiliser la sytaxe « .= », en effet des extension telles que RealURL ou TemplaVoilà ajoutent elles aussi des champs dans le rootline.

Ces options sont aussi disponibles via l'install Tool de TYPO3 dans la section « All Configuration ».

Exemple d'utilisation en TypoScript et héritage via « slide »

Imaginons que nous voulions utiliser une image qui s'affiche dans les pages d'un site, tout en pouvant la modifier très simplement et ce pour n'importe quelle partie de l'arborescence de ce dernier.

Pour ce faire on utilise l'onglet « Ressources » (media) dans les propriétés de la page racine dans lequel on va utiliser le formulaire d'upload ou de choix d'image dans fileadmin, puis en TypoScript on récupère cette image de la façon suivante :

lib.myImage = IMAGE
lib.myImage {
 file.import.field = media
 file.import = uploads/media/
 file.maxW = 250
 altText.field = title
 emptyTitleHandling = removeAttr
}

Avec ce code, seules les pages contenant une image afficheront cette image.

Afin de gérer l'héritage de l'image associée à la page pour ses sous-pages, il suffit de modifier le code comme ceci :

lib.myImage = IMAGE
lib.myImage {
 file.import.data = levelfield:-1, media , slide
 file.import = uploads/media/
 file.import.listNum = 0
 file.maxW = 250
 altText.field = title
 emptyTitleHandling = removeAttr
}

Le code fait ceci : on appelle l'image (champ media) associée à la page courante (levelfield:-1) ; si la page courante ne contient pas d'image l'instruction « slide » permet de remonter dans l'arborescence (rootline) niveau par niveau jusqu'à ce qu'une image soit trouvée.

De cette façon il devient alors très simple par exemple d'avoir une image par niveau d'arborescence.

Outils personnels

Formation Typo3 à Paris
Boite Oblady