Intégrateur certifié et Développeur TYPO3

Les autres blogs

Compteur Load Register sur un objet TypoScript CONTENT

Le principe

L'objet TypoScript CONTENT permet de récupérer des données TYPO3 directement depuis la base de donnée et de paramétrer leur affichage si la requête retourne des résultats.

Dans mon exemple, j'utilise un objet LOAD_REGISTER pour compter le nombre d'enregistrement. La valeur du register Compteur s'incrémente de 1 à chaque enregistrement retourné par mon objet CONTENT.

Je peux également me servir de mon register "Compteur" pour wrapper la totalité de mon objet CONTENT uniquement s'il retourne des résultats. Pour cela, j'utilise ensuite la propriété if.isTrue du Typoscript pour vérifier que la valeur de mon register "Compteur" est bien supérieure à zéro.

Code typoscript

10 = CONTENT
10 {
    # Requête sur la base de donnée
    table = pages
    select {
        pidInList = 1
        selectFields = uid,title
    }
    renderObj = COA
    renderObj {
        # Incrémentation de "Compteur" pour chaque résultat
        10 = LOAD_REGISTER
        10 {
            Compteur.cObject = TEXT
            Compteur.cObject.data = register:Compteur
            Compteur.cObject.wrap = |+1
            Compteur.prioriCalc = intval
        }
        20 = TEXT
        20 {
            field = title
            typolink.parameter.field = uid
			dataWrap = <li>{register:Compteur} - |</li>
        }
    }
	stdWrap.wrap = <ul class="menu-list">|</ul>
    # On wrap uniquement si "Compteur" est true
    stdWrap.if.isTrue.data = register:Compteur
}

Résultat

Si votre objet CONTENT ne retourne aucun résultat, alors il n'y aura pas de rendu HTML de l'objet. Dans le cas contraire, le rendu HTML sera le suivant :

Code HTML

<ul class="menu-list">
    <li><a href="">1 - Page 1</a></li>
    <li><a href="">2 - Page 2</a></li>
    <li><a href="">3 - Page 3</a></li>
</ul>

Remarque

Comme signalé dans les commentaires, un simple stdWrap.required = 1 sur mon objet CONTENT permet de wrapper l'objet uniquement s'il retourne des résultats.

Code typoscript

10 = CONTENT
10 {
    ... ...
    stdWrap.wrap = <ul class="menu-list">|</ul>
    # On wrap uniquement si l'objet retourne des résultats
    stdWrap.required = 1
}

Commentaires

commentaires générés par Disqus