Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
FormBuilder post vers UDT - affichage du $_POST dans le textarea
#1
BOnjour à toutes et à tous,
je suis en train de voir comment je vais pouvoir gérer un message à partir d'un formulaire.

Je n'ai qu'un champs message et deux champs hidden (id_user) et (alias-page)
au post, cela m'appelle une UDT qui enregistre dans une table spécifique les données

Ce que j'aimerais arriver à faire c'est quand je me rends sur la page et qu'il existe un post avec l'user loggé alors je charge le message dans le textarea.

Avez-vous une idée si cela est possible ? et une piste pour savoir comment m'y prendre?

Par ailleurs y a t'il une fonction ou autre qui permettrait d'obtenir toutes les variables disponibles type {debug} de prestashop.

Encore merci pour vos retours.
Belle journée.
Aurore.
Répondre
#2
Rebonjour,
j'avance un peu cependant je bloque sur la récupération de l'alias de page dans une udt

quand je fais un {get_template_vars}
j'affiche des variable dont page_name mais je ne sais pas comment la récupérer en php?

un petit coup de pouce serait le bienvenue.
Merci
Répondre
#3
Bonjour,

Il y a deux méthodes : une en PHP via la récupération de l'objet de contenu courant, mais la méthode la plus rapide dans ton cas serait peut-être de tout simplement passer la variable Smarty dans l'UDT. Par ex :
Code :
{MonUDT page_alias=$page_alias}

Code de l'UDT :
Code :
$page_alias = $params['page_alias'];

Cela répond-il à ta question ?
Répondre
#4
Oui c'est parfait.
Merci beaucoup Smile

et l'inverse est possible ? je m'explique

dans mon gabarit j'appelle {MonUDT page_alias=$page_alias} qui compte le nb de résultats d'une requête à la fin j'ai un $nb_message=1 par exemple.

Est-ce possible dans mon gabarit de faire un test sur $nb_message.

... ma page ou mon gabarit
Code :
[== Indéfini ==]
{MonUDT page_alias=$page_alias}

puis

{if $nb_message !=0}

{/if}



...


j'ai essayé de la passer en global ou autre mais je ne trouve pas
Merci d'avance.
Répondre
#5
Dans ce cas il faut renvoyer la variable à Smarty

Exemple 1
Code :
{$nb_message={MonUDT page_alias=$page_alias}}
{if $nb_message > 0}
...
{/if}
> dans ce cas il faut bien ajouter à ton UDT un "return $nb;" à la fin

Exemple 2 dans l'UDT :
Code :
$smarty->assign('nb_messages', $nb);

Voire même définir le nom de la variable lors de l'appel de l'UDT :
Code :
$smarty->assign($params['assign'], $nb);

... et dans le code Smarty :
{MonUDT page_alias=$page_alias assign='nb_messages'}

Dis-nous si c'est ok pour toi ?
Répondre
#6
Bonsoir AirLibre et merci Smile

la méthode 1 fonctionne très bien si je n'ai besoin que d'une variable.
Je suppose que je devrais utiliser la version 2 si je voulais récupérer 2 variables par exemple nb_message et message lui-même ?

J'ai essayé avec

dans mon udt
Code :
...
$smarty->assign('nb_messages', $nb);
$smarty->assign('message', $message);

puis dans mon gabarit je fais un test si nb>0 et je cherche à afficher message
Code :
[== Indéfini ==]
{$nb={MonUDT page_alias=$page_alias assign='nb_messages'}}
{$message={MonUDT page_alias=$page_alias assign='message'}

{if $nb>0}
//remplissage du textarea dont le nom est message avec la valeur $message

{FormBuilder form='update_rdv' value_MESSAGE='$message'}}
{/if}


Mais cela ne fonctionne pas je pense que quelque chose m'a échappé et je ne sais pas si c'est jouable de remplir le formBuilder :$
Répondre
#7
Bonjour,

En fait la syntaxe :
Code :
{$nb={MonUDT ...

ne peut fonctionner qu'avec une variable de retour - le assign est indépendant de la variable de retour dans mon exemple. A noter cependant qu'un tableau peut être retourné, et traité dans smarty.

Mais le plus simple dans ton cas pour deux variables est de traiter deux assign :
Code :
{MonUDT page_alias=$page_alias assign_message='message' assign_nb='nb'}
Puis dans l'UDT en PHP :
Code :
$smarty->assign($params['assign_nb'], $nb);
$smarty->assign($params['assign_message'], $message);

Ou, si le fait d'assigner dynamiquement le nom de la variable dans la l'UDT est inutile :
Code :
$smarty->assign('nb', $nb);
$smarty->assign('message', $message);
Répondre
#8
C'est super ! franchement un grand merci

Du coup, ce que je pensais comprendre c'est que je transmettais les variables à smarty et que ça les rendait un peu globale ?
mais du coup si je veux injecter la valeur du message dans un formulaire comme ça : ou ailleurs d'ailleurs

Code :
{FormBuilder form='update_rdv' value_MESSAGE='$message'}

la pour le coup ça charge bien le texarea mais avec $message comme contenu.

Pourtant smarty la connait ? et si je fais un {$message} le textarea affiche {$message} ??

je peux faire un {FormBuilder form='update_rdv' assign_message=$message}
Répondre
#9
La syntaxe dans ce cas n'est pas bonne car tu transmet une valeur de type "string" au lieu du contenu de la variable.
Il faut utiliser cette syntaxe :
Code :
{FormBuilder form='update_rdv' value_MESSAGE=$message}
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)