Jump to content

Assign Smarty ne fonctionne pas


Recommended Posts

Bonjour,

 

Je suis actuellement en train d'adapter le slider DDLX à mes besoins, et je rencontre un souci.

Mon objectif est simple : ajouter un lien au clic sur mes images. Jusque là rien de bien sorcier, il me suffit de récupérer le lien stocké dans ma BDD, ce qui marche très bien pour l'instant.

 

En revanche, dès que j'essaie d'associer ces variables avec Smarty pour les afficher dans mon tpl, plus rien ne fonctionne.

 

Mon code php (tout en bas, la fonction transfertLiens() ) :

unction transfertLiens() {

 global $smarty;

 $image1 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=1"));
 $image2 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=2"));
 $image3 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=3"));
 $image4 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=4"));

 $smarty->assign('link1', $image1[0]['link']);
 $smarty->assign('link2', $image1[1]['link']);
 $smarty->assign('link3', $image1[2]['link']);
 $smarty->assign('link4', $image1[3]['link']);

}

/*###################################################################*/

function hookHome($params)
{
 $this->transfertLiens();
 return $this->display(__FILE__, 'ddlxslider.tpl');
}

 

Mon fichier TPL :

 

<a href="{link1}" ><img  src="{$base_dir}modules/DDLX_Slider_Free/images/1.jpg" alt="" /></a>

 

 

 

(Oui je sais, ma fonction est codée salement, mais c'était juste pour le test :) ).

Merci d'avance pour votre aide, je me tire les cheveux depuis 3 heures maintenant sur ce cas.

Link to comment
Share on other sites

Et en mettant ce code là :

 

global $smarty;

		    $smarty->assign('link1', 'test');
		    $smarty->assign('link2', $image2->link);
		    $smarty->assign('link3', $image3->link);
		    $smarty->assign('link4', $image4->link);

 

dans ta function function hookHome($params)

 

?? toujours rien

Link to comment
Share on other sites

Merci de ta réponse.

En effet, çà ne fonctionne pas mieux en mettant mes assign dans le hookHome.

 

Pour ce qui est de ton edit :

Oui je sais, ma fonction est codée salement, mais c'était juste pour le test :) ).

J'avais prévenu :) .

 

Sinon, tu peux éditer ton post en cliquant sur edit, dans le footer de chaque post.

Link to comment
Share on other sites

Tu n'as pas ajouté ça après l'installe du module ?

D'ailleurs, l'install se passe bien ?

 

Il me semble qu'il faut réinstaller à chaque fois qu'on veux utiliser un hook ?!

 

D'ailleurs, $smarty->display ne fonctionne pas mieux ?

 

Ah effectivement, pour l'édit ^^ (marchi)

Link to comment
Share on other sites

Bonjour,

 

Je suis actuellement en train d'adapter le slider DDLX à mes besoins, et je rencontre un souci.

Mon objectif est simple : ajouter un lien au clic sur mes images. Jusque là rien de bien sorcier, il me suffit de récupérer le lien stocké dans ma BDD, ce qui marche très bien pour l'instant.

 

En revanche, dès que j'essaie d'associer ces variables avec Smarty pour les afficher dans mon tpl, plus rien ne fonctionne.

 

Mon code php (tout en bas, la fonction transfertLiens() ) :

http://pastebin.com/K3h2fDy0

 

Mon fichier TPL :

http://pastebin.com/tLfRRLVA

 

 

 

(Oui je sais, ma fonction est codée salement, mais c'était juste pour le test :) ).

Merci d'avance pour votre aide, je me tire les cheveux depuis 3 heures maintenant sur ce cas.

 

Bon je commence par ce qui me saut le plus aux yeux:

 

Tu peux pas commenter la globale smarty dans ta méthode transfertLiens()

 

 

 

Tu en as véritablement besoin .... donc

 

 

function transfertLiens() {

 

global $smarty;

......

 

 

 

ensuite

 

 

$image1 = mysql_fetch_object(mysql_query("SELECT link FROM ps_slider_module WHERE id=1"));

 

Je suis pas certain qu'une liaison soit initialisée et laissée active lors de ton appel. Tu peux vérifier avec un var_dump mais si ça se trouve $image1 est null et donc tu peux assigner ce que tu veux , smarty va afficher du rien puisque null .

 

Dans l'environnement presta , la bonne méthode pour éxécuter ta requête est :

 

$image1 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=1"));

 

Bon là t'auras pas un objet mais un tableau associatif , ce qui change pas grand chose , tu récupère ta valeur et tu l'assignes ainsi :

 

$smarty->assign('link1', $image1[0]['link']);

 

ensuite ce qui me chagrine dans ton code c'est que je vois pas d'appel à transfertLiens() ...

 

faut au moins le faire dans le hook , sinon pas d'assignation :

 

function hookHome($params)

 

{

$this->transfertLiens();

return $this->display(__FILE__, 'ddlxslider.tpl');

}

Link to comment
Share on other sites

Merci de vos réponses.

 

Broceliande :

Tu peux pas commenter la globale smarty dans ta méthode transfertLiens()

Elle était ici commentée parce que j'ai fais un nombre incalculable de tests en tout genre, mais j'avais testé avec bien entendu.

 

$image1=Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=1"));

Merci du tuyau, je ne connais pas très bien la POO en Php :mellow: .

 

$this->transfertLiens();

J'avais également essayer ca, mais sans le $this.

 

Toujours est-il que malgré les modifs cela ne fonctionne pas.

 

Une petite remarque toutefois : je ne suis pas certain que DDLX soit enchanté de te voir ainsi publier le fichier du module en entier ... tu ferais bien de ne garder que les lignes génériques que tu as toi même modifié ...
*

J'ai effectivement enlevé le lien. Ca ne partait pas d'un mauvais sentiment, je voulais juste vous montrer le code dans son intégralité si jamais il y avait une erreur plus haut.

 

Je reposte donc ici mon code lié aux assign :

 

// Créer les variables appelées sur le TPL (liens)

function transfertLiens() {

 $image1 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=1"));
 $image2 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=2"));
 $image3 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=3"));
 $image4 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=4"));

 global $smarty;

 $smarty->assign('link1', $image1[0]['link']);
 $smarty->assign('link2', $image1[1]['link']);
 $smarty->assign('link3', $image1[2]['link']);
 $smarty->assign('link4', $image1[3]['link']);

}


/*###################################################################*/

function hookHome($params)
{
 $this->transfertLiens();
 return $this->display(__FILE__, 'ddlxslider.tpl');
}

 

 

Cette fois-ci, le module plante sans même que je ne rajoue mon href="{link1}" dans mon tpl. Que faire ? Merci d'avance.

 

 

 

EDIT : Je crois avoir cerné l'origine du problème en ayant commenté chaque ligne tout à tour. A priori, ce sont mes 4 lignes de requêtes qui ne passent pas. J'ai également essayé avec un

 

$smarty->assign('link1', 'test');

qui certes, qui plante une fois que j'ajoute {link1} dans mon href.

Link to comment
Share on other sites

Bon, je vais éviter un nouvel edit.

 

En fait je suis juste bigleuse, j'avais oublié la dernière parenthèse dans ma requête.

 

J'avais également oublié d'appeller mon assign avec le "$". Donc là tout fonctionne ^_^ .

 

Merci beaucoup à vous deux de m'avoir aidé.

 

oui j'allais le dire pour ton appel : variable smarty = $

 

mais t'as une autre incohérence dans ton code ainsi modifié :

 

 

$smarty->assign('link1', $image1[0]['link']);

$smarty->assign('link2', $image1[1]['link']);

$smarty->assign('link3', $image1[2]['link']);

$smarty->assign('link4', $image1[3]['link']);

 

^ça c'est pas bon du tout , tu devrais avoir :

 

 

$smarty->assign('link2', $image1[0]['link']);

$smarty->assign('link2', $image2[0]['link']);

$smarty->assign('link3', $image3[0]['link']);

$smarty->assign('link4', $image4[0]['link']);

Link to comment
Share on other sites

  • 3 years later...
Guest
This topic is now closed to further replies.
×
×
  • Create New...