Jump to content

Comment affecter valeur variable (php?, smarty?) lors d'un clic?


Recommended Posts

Bonjours à tous,

 

Mon idée est de constituer des groupes alphabétiques des fabricants (j'en ai beaucoup) mais c'est tout à fait transposable aux produits. Bien, j'ai en interface une bande avec toutes les lettres de l'alphabet et quand je clique sur une lettre, j'aimerai que seuls les fabricants concernés aparaissent.

 

Donc dans le: {foreach from=$manufacturers item=manufacturer name=manufacturers}, je voudrais placer un simple test {if $manufacturer.name[0] == $lettre} et que la valeur $lettre soit justement définie par le clic (A ou B ou C,....).

Donc soit affecter directement une variable smarty, soit activer une fonction php qui s'en charge.

Comment faire pour lancer cette fonction?

 

Merci beaucoup pour votre attention!

Link to comment
Share on other sites

Tu définis le clic sur chaque lettre sous forme d'un bouton submit par exemple :

<input type="submit" value="a" name="a" />

<input type="submit" value="b"name="b" />

...<input type="submit" value="z" name="z" />

 

et effectivement tu récupères la valeur dans le controller (fonction process) du style:

$tableau=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
for($i=0;$i<count($tableau);$i++)
{
if(Tools::iSubmit($tableau[$i]))
{
$lettre=Tools::getValue($tableau[$i]);
$smarty->assign('lettre',$lettre);
}

 

Et ensuite dans le TPL tu récupères $lettre.

 

C'est pas forcément le plus élégant (voir javascript) mais ça doit fonctionner.

Edited by franckm1000 (see edit history)
Link to comment
Share on other sites

Merci frankm1000, décidément tu es sur tous les fronts,

 

J'ai essayé de mettre en oeuvre ta procédure, mais j'ai 2-3 points à éclaircir:

 

-> j'ai mis la partie Code dans le Frontcontroller dans la fonction process () (qui était vide), est-ce bien là qu'il faut le placer? (il n'y pas de fonction process dans le controller Manufacturers) . Par ailleurs dans la ligne if(Tools::iSubmit($tableau[$i]) , j'ai corrigé isubmit par isSubmit ,

est- ce bon?

 

La ligne <input type="submit" value="b"name="b" /> suffit-elle a stocker l'info dans le controller Tools? ou y a t il un morceau de code à rajouter?

 

 

J'aurai aimé que le bouton affecte la variable et soit un lien vers manufacturer-list.tpl . Pour pouvoir effectuer la recherche depuis n'importe quelle page. Si j'encadre le <input> par <a> </a>, l'affectation <input> se fera après le début du chargement de la page manufacturer-list.tpl, donc le frontcontroller sera déjà chargé avant que ne soit affecté la bonne valeur à {$lettre}?

 

Autre question, le tableau où est stockée la valeur 'a' ou 'b' ou... est-il renouvelé à chaque fois qu'on clique sur <input>? Si ce n'est pas le cas comment vider la valeur d'avant?

 

Et enfin, j'ai essayé de mettre en place la procédure, je n'obtenais rien, j'ai donc mis un {$lettre|print_r} dans mon TPL (manufacturers-list), et il m'affiche "1" (sans les ""). Donc pas ce que je cherche.

Link to comment
Share on other sites

Si tu veux travailler dans le fichier manufacturer.php, la partie PHP doit être changée dans le CONTROLLER associé qui se trouve donc ici: controllers/ManufacturerController.php.

Dans ce fichier, tu as bien une fonction process(). C'est ici que tu mets ton code.

 

C'est toujours pareil: un fichier php générique où je travaille (manufacturer, stores, catégorie, product...) => je vais dans le controller faire les traitements.

 

if(Tools::iSubmit($tableau[$i]) , j'ai corrigé isubmit par isSubmit est- ce bon?

Oui

 

<input type="submit" value="b"name="b" />

C'est un champs de formulaire, cela sert à envoyer des informations tout simplement. Ici on envoie au clic sur le bouton la valeur b sur le bouton b.

Ton formulaire soit ressemblé à ça:

<form action="{$request_uri}" name="my_form" method="post">
<input type="submit" value="a"name="a" />
 <input type="submit" value="b"name="b" />
 <input type="submit" value="c"name="c" />
 <input type="submit" value="d"name="d" />
etc......etc.......
 <input type="submit" value="z"name="z" />
</form>

 

Il doit se situé dans le fichier manufacturer.tpl de ton thème.

 

Pour pouvoir effectuer la recherche depuis n'importe quelle page. Si j'encadre le <input> par <a> </a>, l'affectation <input> se fera après le début du chargement de la page manufacturer-list.tpl, donc le frontcontroller sera déjà chargé avant que ne soit affecté la bonne valeur à {$lettre}?

Ca ne veut rien dire. Un input submit est une action et un a en est une autre. Tu ne peux pas faire deux actions en même temps.

Quand tu recharges le form tu reviens sur la page manufacturer.php donc tu vas également lister avec manufacturer-list.tpl (manufacturer-list.tpl n'est pas un fichier chargé seul mais dans manufacturer.tpl).

 

Autre question, le tableau où est stockée la valeur 'a' ou 'b' ou... est-il renouvelé à chaque fois qu'on clique sur <input>? Si ce n'est pas le cas comment vider la valeur d'avant?

La valeur récupérée d'un formulaire n'existe "qu'un clic" ou "qu'une page" après le clic. C'est ce qu'on appelle un post ou get. si tu cliques à nouveau bien sûr l'ancienne valeur n'existe plus.

Edited by franckm1000 (see edit history)
Link to comment
Share on other sites

Merci Frankm, ça marche nickel.

 

Oui, c'est vrai que je m'attaque à des trucs trop durs au vu mon niveau. Je suis ingénieur industriel, donc l'informatique n'est vraiment pas mon fort,je vais m'y mettre plus sérieusement en reprenant les bases. Merci encore!

Link to comment
Share on other sites

Non mais c'est tout à ton honneur de vouloir comprendre ce que tu fais et se faire tout seul. Mais il ne faut pas trop sauter certaines étapes. Faire du traitement PHP sans connaître un minimum sur le passage des variables via les formulaires c'est dur !

Tu devrais te familiariser avec le PHP procédural de base et ensuite te plonger dans la POO

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...