Categories > TinyButStrong general (FR) >

MergeBlock avec la meme clef ... ?

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: zeflex
Date: 2011-08-01
Time: 14:17

MergeBlock avec la meme clef ... ?

J'ai actuellement besoin d'avoir un formulaire avec le nom devant l'input identique à chaque ligne, avec le nom de l'input qui soit incrémental.

Ex :
$TBS->MergeBlock('champs','array',array('Title'=>'tit_1','Title'=>'tit_2'))

Avec cet exemple là, on obtiens que le dernier 'Title' qui s'affiche, le premier disparaissant vu que la clef est identique.

Comment faire merci ? Pour plus d'infos j'avais commencé un sujet mais je suis complétement sur la fausse route ; voir ici : http://forum.hardware.fr/hfr/Programmation/PHP/passer-string-array-sujet_134423_1.htm#bas
By: Skrol29
Date: 2011-08-01
Time: 21:34

Re: MergeBlock avec la meme clef ... ?

Est ce que tu peux donner une exemple de ce que tu cherches à afficher au final ?
By: zeflex
Date: 2011-08-01
Time: 22:43

Re: MergeBlock avec la meme clef ... ?

Oui en fait, je souhaites afficher ceci :

Pour N "titles", j'ai besoin d'afficher N lignes avec marquées : Title et un champs input à coté. Le texte "title" restera forcément inchangé, mais le "name" de l'input sera fixé par la valeur donnée par le mergeblock.

J'ai besoin de cela car je peux avoir N titles dans un formulaire ou on vas rentrer N valeurs une premiere fois (avec une fonction en JS) ; et ensuite si j'ai besoin de rééditer ce formulaire, j'aurai donc N titles que je ne peux prévoir à l'avance (il me faudra chercher cela dans ma bdd).
By: Skrol29
Date: 2011-08-01
Time: 22:47

Re: MergeBlock avec la meme clef ... ?

C'est plus clair, mais j'ai encore un doute pour la réponse.
Peux-tu donner un exemple réel (sur 3 lignes par exemple) de ce que tu as as base de donnée d'une part, et de ce que tu veux afficher d'autre part ?
By: zeflex
Date: 2011-08-02
Time: 08:08

Re: MergeBlock avec la meme clef ... ?

Ok alors, d'un coté , à l'origine j'avais ceci :

$fields[1] = array('Title EN'=>'cr_en_1','Title FR'=>'cr_fr_1','First name'=>'cr_fn_1','Last name'=>'cr_ln_1');
Ceci à l'origine, c'est quand il n'y a qu'un titre avec tous ces champs. L'affichage sera donc :
Title EN : <input type="text" name="cr_en_1"/>, Title FR : <input type="text" name="cr_fr_1"/> ...

Mais l'user peut cliquer sur un plus , qui vas dupliquer ces champs en JS et les nommer , cr_en_2 , cr_fr_2, ...

Quand il sauvegarde, j'ai fais une fonction en php pour sauver ca dans la bdd sous cette forme : Dans le champs bdd nommé "titles_en" , je sauvegarde ainsi : |cr_en_1||cr_en_2|| et dans "titles_en" , |cr_fr_1||cr_fr_2| ...
Quand il réédite ces champs, j'ai une autre fonction qui vas chercher les datas dans les champs de la bdd, qui splitte chaques champs par rapport aux "||" et qui regroupe par ordre les associations (cr_en_1 avec cr_fr_1 et ainsi de suite).

Donc du coup quand je ressors mon formulaire, le $fields[1] n'est plus le meme (je peux pas le définir à l'avance donc).

J'espere que je me suis mieux expliqué ... Je n'ai pas copié mes bouts de code php et sorties HTML car j'ai fais tellement d'essais que ca n'affiches plus ce qu'il faudrait du tout.
By: Skrol29
Date: 2011-08-02
Time: 20:01

Re: MergeBlock avec la meme clef ... ?

> Dans le champs bdd nommé "titles_en" , je sauvegarde
> ainsi : |cr_en_1||cr_en_2|| et dans "titles_en" , |cr_fr_1||cr_fr_2|

Est ce que tu ne veux pas plutôt dire :
    je sauvegarde ainsi : |valeur saisie EN 1||valeur saisie EN 2|| et dans "titles_fr" , |valeur saisie FR 1||valeur saisie FR 2|
?

Parce qu'on ne se figure pas trop où sont les données saisies.
Il y a une autre chose qui me trouble : ton tableau de données $fields contient un texte qui se répète structurellement. C'est 'Tilte EN', 'Title FR'. S'ils sont en dure, autant les mettre en dure dans le modèle. On s'attend aussi à avoir les données saisies pour l'utilisateur (ou celles par défaut lors du premier affichage) dans ce même tableau $fields.

Les données ne devraient-elles pas être comme ceci :
$fields[1] = array(
  'titles_en' => "My first title",
  'titles_fr' => "Mon premier titre",
  'first_name' => "Pierre",
  'last_name' => "Durant",
);
$fields[2] = array(
  'titles_en' => "My second title",
  'titles_fr' => "Mon deuxième titre",
  'first_name' => "Marie",
  'last_name' => "Dujardin",
);

Et du coup le modèle serait simplement :
<div>
  Title EN: <input type="text" name="cr_en_[champs.$]" value="[champs.titles_en]"/>,
  Title FR: <input type="text" name="cr_fr_[champs.$]" value="[champs.titles_fr]"/>
  First Name: [champs.first_name;block=div]
  Last Name: [champs.last_name]
</div>

Remarque : tu peux aussi remplacer le nommage
  name="cr_en_1"
par
  name="cr_en[1]"
ce qui te permet, côté PHP, de récolter toutes les saisies depuis $_REQUEST['cr_en'] qui est du coup un tableau PHP.
By: zeflex
Date: 2011-08-05
Time: 11:25

Re: MergeBlock avec la meme clef ... ?

Done !

Merci pour le tuyau ; en effet j'ai du modifier tous mes formulaires à champs répétitifs ... ca m'a pris du temps mais ca fonctionne enfin ...

En revanche question pour les formulaires : comment vaut il mieux mettre le texte intitulé d'un champs input ? Par ex "Title EN" ; vaut il mieux le mettre en dur dans la page HTML ou en utilisant des balises TBS ?
Je suis nouveau à l'utilisation de ce moteur et disons que je suis limite en temps pour exploiter beaucoup de possibilités.
Merci pour ta réponse.
By: Skrol29
Date: 2011-08-05
Time: 22:46

Re: MergeBlock avec la meme clef ... ?

> En revanche question pour les formulaires : comment vaut il mieux mettre le texte intitulé d'un champs input ?

Si le texte est statique (pas dynamique) alors il vaut mieux le mettre en dur.
By: zeflex
Date: 2011-08-05
Time: 23:12

Re: MergeBlock avec la meme clef ... ?

Ok merci pour l'info ;)