Forums de la communauté francophone du CMS TYPO3: Variable Dynamique Fluid - Forums de la communauté francophone du CMS TYPO3

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Variable Dynamique Fluid

#1 L'utilisateur est hors-ligne   sloughi 

  • Nouveau
  • Pip
  • Groupe : Membres
  • Messages : 6
  • Inscrit(e) : 23-novembre 16

Posté 23 novembre 2016 à 15:09

Hello,

Je développe une extension TYPO3 pour la gestion d'histoires.

Dans cette extension, j'ai déclaré le setting suivant :
plugin.tx_stories_storylisting.settings.pid.list.7 = 12

Le chiffre 7 c'est l'identifiant du sysfolder où sont stockées des histoires.

Pour le moment, je passe par un viewhelper custom un peu lourd pour récupérer cette variable.

Mais j'imaginais plutôt un truc du genre :
{settings.pid.list.{story.pid}}

Bien sur, ça ne fonctionne pas Image IPB

J'ai aussi tenté d'utiliser le ViewHelper de vhs :
https://fluidtypo3.o...ViewHelper.html
Mais sans succès...

Une idée ?

A plus,

Laurent

Ce message a été modifié par sloughi - 23 novembre 2016 à 15:10.

0

#2 L'utilisateur est hors-ligne   OlivierSC 

  • Pilier du forum
  • PipPipPipPipPipPipPip
  • Groupe : Administrateur
  • Messages : 1 688
  • Inscrit(e) : 26-juin 09

Posté 24 novembre 2016 à 10:10

Bonjour Laurent,

Il me semble avoir vu passer quelque chose sur Slack à ce sujet. Je regarde quand j'ai quelques minutes.

Pour précision, quelle est ta version de TYPO3?

OlivierSC
0

#3 L'utilisateur est hors-ligne   sloughi 

  • Nouveau
  • Pip
  • Groupe : Membres
  • Messages : 6
  • Inscrit(e) : 23-novembre 16

Posté 24 novembre 2016 à 10:33

Hello Olivier,

Merci Image IPB
J'utilise TYPO3 7.6.11

Ce message a été modifié par sloughi - 24 novembre 2016 à 10:34.

0

#4 L'utilisateur est hors-ligne   OlivierSC 

  • Pilier du forum
  • PipPipPipPipPipPipPip
  • Groupe : Administrateur
  • Messages : 1 688
  • Inscrit(e) : 26-juin 09

Posté 24 novembre 2016 à 10:42

Alors sur slack il était indiqué que cela fonctionné nativement dans Fluid à partir de TYPO3 v8+, malheureusement cela ne correspond pas à ton cas.

Il indiquait que, sinon, il fallait passer par le viewhelper VHS v:variable.get en construisant le "nom" de la variable en utilisant ta variable. Tu ne dois donc pas être loin de la solution.
{v:variable.get(name: 'settings.pid.list.{story.pid}')}


Si cela ne fonctionne pas, je te conseille de faire un debug fluid de l'objet "settings" (pour etre sur qu'il contient bien la donnée attendue) et aussi de l'objet "story" opour aussi vérifier que les données sont bien présentes et correspondent à ce qui est dans le "settings"
<f:debug>{settings}</f:debug>
<f:debug>{story}</f:debug>


OlivierSC
0

#5 L'utilisateur est hors-ligne   sloughi 

  • Nouveau
  • Pip
  • Groupe : Membres
  • Messages : 6
  • Inscrit(e) : 23-novembre 16

Posté 24 novembre 2016 à 16:04

Flute.. J'attends la LTS... et quelques versions pour passer sur la 8 :D

Pour le viewhelper de VHS, j'ai encore tenté une petite heure.. mais je ne parviens pas à comprendre comment il fonctionne.
Cette personne là non plus apparement : http://stackoverflow...alue-within-var :D

Merci pour le tips des debugs, bien pratique ! et oui.. tout est bien là !

Bonne journée
0

#6 L'utilisateur est hors-ligne   OlivierSC 

  • Pilier du forum
  • PipPipPipPipPipPipPip
  • Groupe : Administrateur
  • Messages : 1 688
  • Inscrit(e) : 26-juin 09

Posté 24 novembre 2016 à 18:37

Pour le fun je testerais bien ces lignes là:
- l'affichage et le get de la variable dans settings
<f:debug>{settings.pid.list.7}</f:debug> (doit afficher 12)
<f:debug>{v:variable.get(name: 'settings.pid.list.7')}</f:debug> (doit afficher 12)

- l'affichage et le get de la variable dans story
<f:debug>{story.pid}</f:debug> (doit afficher 7)
<f:debug>{v:variable.get(name: 'story.pid')}</f:debug> (doit afficher 7)

- le test d'inclusion d'un viewhelper get dans un autre viewhelper get
<f:debug>{v:variable.get(name: 'settings.pid.list.{v:variable.get(name: 'story.pid')}')}</f:debug> (doit afficher 12)


Sinon une autre possibilité est de voir si il n'est pas possible de faire une boucle sur la variable "settings.pid.list" (si Fluid le considère comme un tableau), et dans cette boucle de vérifier si la valeur de l'item est équivalante à la valeur recherchée :
<f:for each="{settings.pid.list}" as="item" key="number" iteration="itemIteration">
  <f:if condition="{item}=={story.pid}"><f:then>
    ... ici l'action si c'est équivalent ... ca peut etre un traitement ou l'affectation d'une variable via v:variable.set
  </f:then></f:if>
</f:for>

C'est fait à main levée sans tester, je ne sais pas si ça marche mais ça vaut peut être le coup d'essayer ;)

OlivierSC
0

#7 L'utilisateur est hors-ligne   sloughi 

  • Nouveau
  • Pip
  • Groupe : Membres
  • Messages : 6
  • Inscrit(e) : 23-novembre 16

Posté 24 novembre 2016 à 20:25

Re


J'ai du modifier une valeur d'un conf :
plugin.tx_stories_storylisting.settings.pid.list.7 = 3


Voici les résultats des debugs ( je mets à jour tes commentaires, pour conserver la logique de la nouvelle conf


<f:debug>{settings.pid.list.7}</f:debug> (doit afficher 3) 
Exact

<f:debug>{v:variable.get(name: 'settings.pid.list.7')}</f:debug> (doit afficher 3)
et Non.. et c'est là que je ne comprends pas, ça affiche le même résultat que {settings.pid.list} ( donc, dans mon cas un array avec 3 valeurs , correspondant à l'uid de trois pages différentes )

<f:debug>{story.pid}</f:debug>
Affiche 7

<f:debug>{v:variable.get(name: 'story.pid')}</f:debug> (doit afficher 7)
Exact 

<f:debug>{v:variable.get(name: 'settings.pid.list.{v:variable.get(name: 'story.pid')}')}</f:debug> (doit afficher 3)
Et non. Ca affiche la chaine de caractère qui est dans le debug... : {v:variable.get(name: 'settings.pid.list.{v:variable.get(name: 'story.pid')}')}



Pour la boucle, très bonne idéé,,,
{settings.pid.list} est bien considéré comme un tableau.
Par contre, la comparaison ne fonctionne pas.
Je pense que c'est probablement un problème de typage. {item} est de type "chars" et {story.pid} est un integer.

J'ai forcé le type de item avec :
<v:variable.convert value='{item}' type='integer'></v:variable.convert>

Ca fonctionne bien, mais impossible d'utiliser ce helper dans le if .. que ce soit en remplaçant directement item par ce helper.
Ou en tentant d'utiliser <v:variable.set> qui semble refuser de prendre le helper de conversion en paramètre "value." :(





0

#8 L'utilisateur est hors-ligne   OlivierSC 

  • Pilier du forum
  • PipPipPipPipPipPipPip
  • Groupe : Administrateur
  • Messages : 1 688
  • Inscrit(e) : 26-juin 09

Posté 25 novembre 2016 à 17:39

Hello :)

Voir le messagesloughi, le 24 novembre 2016 à 20:25, dit :

<f:debug>{v:variable.get(name: 'settings.pid.list.7')}</f:debug> (doit afficher 3)
et Non.. et c'est là que je ne comprends pas, ça affiche le même résultat que {settings.pid.list} ( donc, dans mon cas un array avec 3 valeurs , correspondant à l'uid de trois pages différentes )


Ca c'est assez bizarre...
Une hypothèse serait qu'il prend le chiffre "7" comme l'indice du tableau et non comme la clé (ca me parrait assez bizarre mais vu que le résultat "logique" ne fonctionne pas, faut chercher d'autres pistes).
Il chercherait donc le 7eme item du tableau "list".
Pour vérifier cela, est ce qu'il serait possible de tester ceci pour voir si il remonte l'item 0 (le 1er) de ton tableau:
<f:debug>{v:variable.get(name: 'settings.pid.list.0')}</f:debug>


Voir le messagesloughi, le 24 novembre 2016 à 20:25, dit :

Par contre, la comparaison ne fonctionne pas.
Je pense que c'est probablement un problème de typage. {item} est de type "chars" et {story.pid} est un integer.

Si tu es bloqué, tu dois pouvoir faire un viewhelper qui réaliser cette comparaison.

D'ailleurs, tu dois pouvoir faire un viewhelper qui réalise la récupération de la valeur, un peu sur la base du viewhelper GET de VHS mais sans le pb d'accès à ton tableau, du fait que tu as la main sur le code PHP pour gérer les cas de figure plus compliqués.

OlivierSC
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)