Go to main content

Textpattern CMS support forum

You are not logged in. Register | Login | Help

#1 2011-10-14 12:09:23

sacripant
Plugin Author
From: Rhône — France
Registered: 2008-06-01
Posts: 479
Website

[fr-fr] output_form et yield… dommage

Hello à tou(te)s,

J’aime bien tenter. Mais ça marche rarement.
Ma dernière idée que je voudrais partager avec vous.

J’avais envie de rajouter une nouvelle fonction à mon install par défaut de Txp : un module qui permet de faire du “odd” “even” pour n’importe quelle boucle (enfin, les articles, les cat_listes et les sections_listes).

Le code est assez répandu : par exemple pour une liste de catégories.

<txp:if_first_category>
    <txp:variable name="style" value="even" />
</txp:if_first_category>
<txp:if_variable name="style" value="even">
    <txp:variable name="style" value="odd" />
<txp:else />
    <txp:variable name="style" value="even" />
</txp:if_variable>

Le problème de ce code, c’est qu’il ne fonctionne que dans une liste de catégories. À cause de la première condition <txp:if_first_category>.

Qui ne tente rien n’a rien.
Pourquoi ne pas utiliser <txp:yield /> comme argument d’un output_form pour faire basculer category en article ou section

Module “odd_even” de type misc :

<txp:if_first_<txp:yield />>
    <txp:variable name="style" value="even" />
</txp:if_first_<txp:yield />>
<txp:if_variable name="style" value="even">
    <txp:variable name="style" value="odd" />
<txp:else />
    <txp:variable name="style" value="even" />
</txp:if_variable>

Et on appel le module dans n’importe quelle boucle
Par exemple pour une boucle article.

<txp:output_form form="odd_even">article<txp:output_form />

Bon, je me doutais que ça n’allait pas marcher.
Mais si vous avez une petite idée pour que cela marche…

bien sur, je pourrais mettre les 3 premières ligne dans le yield mais j’aimerais bien faire mieux :)

Offline

#2 2011-10-14 14:24:32

maniqui
Member
From: Buenos Aires, Argentina
Registered: 2004-10-10
Posts: 3,070
Website

Re: [fr-fr] output_form et yield… dommage

Bonjour, my french is obsolete, so you will have to excuse me using English.

<txp:if_first_<txp:yield />>
    <txp:variable name="style" value="even" />
</txp:if_first_<txp:yield />>

That, definitely, won’t work. It was a somewhat clever idea, but then… it will just break the parser.

As I understand you are trying to avoid repeating code, by creating an “agnostic” zebra-thing generator.
You don’t have to initialize the variable (as you do in the <txp:if_first_xxxx>). It should work without that.

Take a look at:
http://awasteofwords.com/article/fun-with-zebras-and-textpattern-407 (written by Wet).

Hope it helps!


La música ideas portará y siempre continuará

TXP Builders – finely-crafted code, design and txp

Offline

#3 2011-10-14 19:17:38

sacripant
Plugin Author
From: Rhône — France
Registered: 2008-06-01
Posts: 479
Website

Re: [fr-fr] output_form et yield… dommage

Maniqui ? tu t’es perdu ? :p

Merci pour ta réponse (moi je continue en Français).

You don’t have to initialize the variable (as you do in the <txp:if_first_xxxx>). It should work without that.

Yes AND No

YES :
avec le code de Wet, si la variable n’existe pas, elle aura la valeur odd, perfect

NO :
Mais si la variable existe déjà et a la valeur “odd”, la boucle va commencer avec la valeur even et c’est parfois problématique.

exemple sans <if_first_xxx />

Header class=*even*
Article 1 class=*odd*
Article 2 class=*even*
Article 3 class=*odd*
Header class=*even*
Article 1 class=*even*
Article 2 class=*odd*
Article 3 class=*even*

Dans la cas d’une première boucle avec un nombre de réponses impaires, si on ne réinitialise pas la variable au départ de la 2e boucle, on commence avec la valeur “even”.

Et c’est encore plus problématique avec 3 valeurs.

I want a bulletproof zebra module :)

Offline

#4 2012-06-04 11:00:14

CeBe
Plugin Author
From: Caen - Fr
Registered: 2010-06-25
Posts: 345
Website

Re: [fr-fr] output_form et yield… dommage

Peut-être que ceci devrait marcher, pas testé tel quel mais je viens de faire quelque chose de similaire :

<txp:php>
  $sFlipflop = "
    <txp:if_first_".yield().">
        <txp:variable name=\"style\" value=\"even\" />
    </txp:if_first_".yield().">
    <txp:if_variable name=\"style\" value=\"even\">
        <txp:variable name=\"style\" value=\"odd\" />
    <txp:else />
        <txp:variable name=\"style\" value=\"even\" />
    </txp:if_variable>" ;
  echo( parse( $sFlipflop ) ) ;
</txp:php>

En plugins possibles il y a zem_nth et chh_flipflop.

Offline

Board footer

Powered by FluxBB