- 1
[Opened] Passage capricieux de paramètres à une zone
Posted by nicolas42 on 04/18/2013 19:12
Après avoir tenté ma chance sur l'IRC en vain, je tente sur le Forum !
J'ai une petite question concernant le passage de paramètres à une zone J'ai une page qui, au final, va appeler 2 fois la même zone : une fois sans paramètre, et une fois avec.
La version "sans param" marche bien.
Mais quand j'intègre dans un de mes sous-templates :
{zone 'app~hub', array('id_user'=>$user->usr_id_user)}
et que dans mon PHP je tente de faire :
$id_user=$this->param('id_user');
id_user reste à vide l'affichage de $user->usr_id_user est bien correct dans le template J'ai même tenté de mettre une valeur en dur.
Ayant une version assez ancienne de Jelix (1.3), est-ce un bug, ou une fausse manip de ma part (je suppose que c'est cette derniere réponse..)
Côté empilement, j'ai un template principal qui appelle ma zone et inclu un autre template. Ce 2eme template intègre lui-aussi la même zone, cette fois-ci avec un param
J'ai aussi tenté de désactiver le premier appel de la zone, mais le pb est identique..
je viens aussi de tenter $GLOBALS['gJCoord']->request->getParam('id_user') (dixit la doc 1.3).. qui ne marche pas non plus
Un var_export de $GLOBALS['gJCoord']->request ne m'indique rien de renseigné en param.
[Opened] Passage capricieux de paramètres à une zone
Posted by foxmask on 04/18/2013 20:11
il me semblait que ce bug était fixe car il y avait bien un PB avec les templates de zones de zones.
@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !
[Opened] Passage capricieux de paramètres à une zone
Posted by laurentj on 04/18/2013 21:29
bonjour
je viens aussi de tenter $GLOBALS['gJCoord']->request->getParam('id_user')
les paramètres de request n'ont absolument rien à voir avec les paramètres de zone.
Et sinon, ton archi est un peu confuse.
Essaye de nous montrer du code minimal qui montre le problème...
[Opened] Passage capricieux de paramètres à une zone
Posted by nicolas42 on 04/19/2013 09:36
@foxmax : j'utilise actuellement un Jelix 1.3.2 (vieux projet...), peut-être que dans cette version, le bug n'avait pas encore été corrigé ?
@laurent : il est indiqué dans la doc que la récupération des paramètres se fait grâce à $this->param('mon_param'). Ailleurs dans la doc, j'avais trouvé une alternative à la récupération des params, avec $GLOBALS['gJCoord']->request->getParam('id_user') ... qui était présentée comme un alternative à getParam(). Mais j'ai sans doute mal interprété la doc.
Côté code minimal, j'ai testé avec une seule zone, ça ne marche pas on plus, donc voilà une version "light" (sans "sous-templates", avec une seule zone..) :
userframeHtmlResponse.class.php :
require_once (JELIX_LIB_CORE_PATH.'response/jResponseHtml.class.php'); class userframeHtmlResponse extends jResponseHtml { public $bodyTpl = 'app~userframe'; function __construct() { global $gJCoord; parent::__construct(); // Include your common CSS and JS files here $this->addCSSLink('/css/reset.css'); $this->addCSSLink('/css/user.css'); $this->addJSLink('/js/jquery.1.6.4.min.js'); $this->addJSLink('/js/jMenu.jquery.js'); $this->addJSLink('/js/functions.js'); } protected function doAfterActions() { // Include all process in common for all actions, like the settings of the // main template, the settings of the response etc.. $this->body->assignIfNone('MAIN','<p>no content</p>'); } }
userframe.tpl :
<div id="wrap" > {zone 'app~hub', array('id_user',28)} </div>
hub.zone.php :
<?php class hubZone extends jZone { protected $_tplname='app~zone_hub'; protected $_useCache = false; protected $_cacheTimeout = null; protected function _prepareTpl(){ $id_user=$this->param('id_user'); echo '___'.var_export($id_user,true); } }
Je ne vous met pas le template app~zone_hub.. vu que mon pb se situe avant : le echo me renvoie NULL..
[Opened] Passage capricieux de paramètres à une zone
Posted by nicolas42 on 04/19/2013 10:28
Histoire de compléter un peu ma recherche, je viens de voir qu'un message d'erreur s'affiche dans la barre de debuggage :
array_key_exists() expects parameter 2 to be array, null given Code: 2 File: C:\wamp\www\evotopia.net\httpdocs\lib\jelix\utils\jZone.class.php 141
[Opened] Passage capricieux de paramètres à une zone
Posted by laurentj on 04/19/2013 17:56
Mais j'ai sans doute mal interprété la doc.
Oui. Le $this->param() (ou getParam()) d'un objet zone, ça récupère un paramètre de la zone, alors que le $GLOBALS['gJCoord']->request->getParam('id_user')
ça récupérer un paramètre de la requete http. Rien à voir donc.
Et sinon, pour ton problème, erreur dans ton template
// il faut faire {zone 'app~hub', array('id_user'=>28)} // au lieu de {zone 'app~hub', array('id_user',28)}
[Opened] [Résolu] Passage capricieux de paramètres à une zone
Posted by nicolas42 on 04/19/2013 18:22
Problème résolu ! Ma zone avait son constructeur surchargé.. et j'avais ommis d'y placer un parent::__construct()..
public function __construct($params=array()) { //code perso... parent::__construct($params); }
Merci à Brayce et EricD de l'IRC pour le coup de pouce
- 1