clem_b Posted September 17, 2020 Share Posted September 17, 2020 Bonjour, Je suis actuellement en train de modifier un module. Actuellement par miracle tout fonctionne correctement, cependant je n'arrive pas à récupérer les var smarty créer pour en faire des var php Voici ce que j'ai essayer ainsi que les erreurs obtenu: Quote $myVar = $smarty->get_template_vars('store_text'); Notice: Undefined variable: smarty in /home/monSite/modules/monModule/monModule.php on line 117 Fatal error: Call to a member function get_template_vars() on a non-object in /home/monSite/modules/monModule/monModule.php on line 117 Quote $myVar = $_smarty_tpl->get_template_vars('store_text'); Notice: Undefined variable: _smarty_tpl in /home/monSite/modules/monModule/monModule.php on line 117 Fatal error: Call to a member function get_template_vars() on a non-object in /home/monSite/modules/monModule/monModule.php on line 117 Quote $myVar = $template->get_template_vars('store_text'); Notice: Undefined variable: template in /home/monSite/modules/monModule/monModule.php on line 117 Fatal error: Call to a member function get_template_vars() on a non-object in /home/monSite/modules/monModule/monModule.php on line 117 Quote $myVar = $this->get_template_vars('store_text'); Fatal error: Call to undefined method monModule::get_template_vars() in /home/monSite/modules/monModule/monModule.php on line 117 Quote $myVar = $smarty->getTemplateVars('store_text'); Notice: Undefined variable: smarty in /home/monSite/modules/monModule/monModule.php on line 118 Fatal error: Call to a member function getTemplateVars() on a non-object in /home/monSite/modules/monModule/monModule.php on line 118 Quote $myVar = $this->_tpl_vars['store_text']; Notice: Undefined property: monModule::$_tpl_vars in /home/monSite/modules/monModule/monModule.php on line 119 Quote $myVar = $this->get_template_vars('store_text'); Fatal error: Call to undefined method monModule::get_template_vars() in /home/monSite/modules/monModule/monModule.php on line 117 Quote $myVar= "{$store_text}"; Notice: Undefined variable: store_img in /home/monSite/modules/monModule/monModule.php on line 117 Quote $myVar = $template->getVariable('store_text'); Notice: Undefined variable: template in /home/monSite/modules/monModule/monModule.php on line 117 Fatal error: Call to a member function getVariable() on a non-object in /home/monSite/modules/monModule/monModule.php on line 117 Quote $myVar= $GLOBALS['smarty']->getTemplateVars('store_text'); Rien ne se passe !!! Quote global $smarty_object; $myVar= $smarty_object->get_template_vars('store_text'); Fatal error: Call to a member function get_template_vars() on a non-object in /home/monSite/modules/monModule/monModule.php on line 118 Du coup comment faire pour récupérer ces valeurs ? Link to comment Share on other sites More sharing options...
Eolia Posted September 17, 2020 Share Posted September 17, 2020 il y a 16 minutes, clem_b a dit : cependant je n'arrive pas à récupérer les var smarty créer pour en faire des var php Whaouh.... C'est tout l'inverse^^ Les variable Smarty sont créées depuis PHP Link to comment Share on other sites More sharing options...
clem_b Posted September 17, 2020 Author Share Posted September 17, 2020 Je dois mal m'exprimer... Dans mon PHP voici ce que j'ai : Quote PHP: $this->smarty->assign(array( 'store_img' => Configuration::get('popup_IMG'), 'store_text' => Configuration::get('popup_TEXT', $id_lang), 'store_aj' => Configuration::get('popup_DateAJ', $id_lang), 'store_am' => Configuration::get('popup_DateAM', $id_lang), 'store_aa' => Configuration::get('popup_DateAA', $id_lang), 'store_a' => Configuration::get('popup_DateA', $id_lang), 'store_bj' => Configuration::get('popup_DateBJ', $id_lang), 'store_bm' => Configuration::get('popup_DateBM', $id_lang), 'store_ba' => Configuration::get('popup_DateBA', $id_lang), 'store_b' => Configuration::get('popup_DateB', $id_lang), )); Dans mon TPL Quote TPL: <p class="popupText">{$store_text}</p></a> <p class="popupText DateDebut">{$store_aj}/{$store_am}/{$store_aa} {$store_a}</p> <p class="popupText DateFin">{$store_bj}/{$store_bm}/{$store_ba} {$store_b}</p> J'aimerai en faite que le 'store_text' qui est dans mon php soit une variable php Ici il défini une var smarty ci je ne me trompe pas ? Link to comment Share on other sites More sharing options...
coeos.pro Posted September 17, 2020 Share Posted September 17, 2020 dans ce cas, dans le PHP mettez : $store_text = Configuration::get('popup_TEXT', $id_lang); Link to comment Share on other sites More sharing options...
clem_b Posted September 17, 2020 Author Share Posted September 17, 2020 (edited) Lorsque je fait ceci rien n'apparait... malgré un 'echo($store_text)'; Edited September 17, 2020 by clem_b (see edit history) Link to comment Share on other sites More sharing options...
clem_b Posted September 17, 2020 Author Share Posted September 17, 2020 Finalement ça fonctionne j'ai mal positionner la formule... Link to comment Share on other sites More sharing options...
clem_b Posted September 17, 2020 Author Share Posted September 17, 2020 Nouveau problème: Quote PHP: $store_aj = Configuration::get('popup_DateAJ', $id_lang); $store_am = Configuration::get('popup_DateAM', $id_lang); $store_aa = Configuration::get('popup_DateAA', $id_lang); $store_a = Configuration::get('popup_DateA', $id_lang); $store_bj = Configuration::get('popup_DateBJ', $id_lang); $store_bm = Configuration::get('popup_DateBM', $id_lang); $store_ba = Configuration::get('popup_DateBA', $id_lang); $store_b = Configuration::get('popup_DateB', $id_lang); $dateDebut = $store_aa.'-'.$store_am.'-'.$store_aj.' '.$store_a; $dateFin = $store_ba.'-'.$store_bm.'-'.$store_bj.' '.$store_b; $dateAuj = date("Y-m-d H:i:s"); if (($dateDebut < $dateAuj) && ($dateAuj < $dateFin)){ return Db::getInstance()->Execute( 'UPDATE `'._DB_PREFIX_.'product` SET active = 1 WHERE id_category_default = 51; UPDATE `'._DB_PREFIX_.'product_shop` SET active = 1 WHERE id_category_default = 51; UPDATE `'._DB_PREFIX_.'category` SET active = 1 WHERE id_category = 51;' ); } else { return Db::getInstance()->Execute( 'UPDATE `'._DB_PREFIX_.'product` SET active = 0 WHERE id_category_default = 51; UPDATE `'._DB_PREFIX_.'product_shop` SET active = 0 WHERE id_category_default = 51; UPDATE `'._DB_PREFIX_.'category` SET active = 0 WHERE id_category = 51' ); } le module ne fonctionne plus et il me retourne une valeur 1 (comme si je faisait un echo('1') Link to comment Share on other sites More sharing options...
coeos.pro Posted September 17, 2020 Share Posted September 17, 2020 tu mets return Db::getInstance()->Execute... ...il retourne 1 Link to comment Share on other sites More sharing options...
clem_b Posted September 17, 2020 Author Share Posted September 17, 2020 Je suis désolé je n'ai pas vraiment les bases de php... j'avance à mon rythme Y a t'il un moyen d'enlever le '1' ? j'aimerai seulement qu'il l'execute J'imagine que je dois remplacer return par quelque choses d'autres ? Link to comment Share on other sites More sharing options...
coeos.pro Posted September 17, 2020 Share Posted September 17, 2020 https://www.prestashop.com/fr/blog/les-bonnes-pratiques-de-la-classe-db-sur-prestashop-1-5 c'est valable aussi pour 1.6 et 1.7 Link to comment Share on other sites More sharing options...
Eolia Posted September 17, 2020 Share Posted September 17, 2020 Enlevez le mot "return" Link to comment Share on other sites More sharing options...
clem_b Posted September 17, 2020 Author Share Posted September 17, 2020 Merci cela fonctionne. Pour le moment je me contenterai de l'"Execute" malgré que cela ne soit pas recommandé. Encore merci de vos aides Link to comment Share on other sites More sharing options...
doekia Posted September 17, 2020 Share Posted September 17, 2020 Si j'ai compris, tu pourrais "éventuellement" retrouver les variables smarty définies ailleurs via $this->smarty->get_template_vars() ... pour la syntaxe regarder la doc smarty MAIS c'est sûrement voué à l'échec car les variables sont définies dans un contexte smartyData isolé et non dans un contexte global. Link to comment Share on other sites More sharing options...
clem_b Posted October 9, 2020 Author Share Posted October 9, 2020 Bonjour, J'ai un autre problème. Le module fonctionne mais pas comme je le souhaite. Le module : Celui ci active une catégorie ainsi que les produits étant dans cette catégorie via une date défini puis les désactive à la fin de la date. Lorsque je met ma 'date début' et ma 'date fin', les produits s'active comme souhaité (si je suis entre ces 2 valeurs). Cependant lorsque la date est expiré cela ne fonctionne pas comme souhaité. En effet je dois me rendre dans le Back-office -> Module -> Sélectionner mon Module puis rafraîchir la page de configuration du module Du coup j'aimerai savoir s'il y a une solution afin que cela soit 'automatique' ? Link to comment Share on other sites More sharing options...
Eolia Posted October 9, 2020 Share Posted October 9, 2020 Un script php ne se déclenche que si on l'appelle... Donc soit une tâche cron, soit le hooker dans le header par exemple. Link to comment Share on other sites More sharing options...
clem_b Posted October 9, 2020 Author Share Posted October 9, 2020 J'aimerai éviter de passé par une tâche cron car on ne peux pas choisir une heure précise... Quote soit le hooker dans le header Je ne suis pas sûr de comprendre. Mon hook ce situe belle et bien dans header.tpl <div class="popup_hook"> {$HOOK_POPUP} </div> Par contre je l'ai mis dans la colonne de droite --> faut il que je remplace hookRightColumn par hookHeader ??? public function hookRightColumn($params) { if (!$this->isCached('popup.tpl', $this->getCacheId())) { $id_lang = $this->context->cart->id_lang; $this->smarty->assign(array( 'store_img' => Configuration::get('popup_IMG'), 'store_text' => Configuration::get('popup_TEXT', $id_lang), 'store_aj' => Configuration::get('popup_DateAJ', $id_lang), 'store_am' => Configuration::get('popup_DateAM', $id_lang), 'store_aa' => Configuration::get('popup_DateAA', $id_lang), 'store_a' => Configuration::get('popup_DateA', $id_lang), 'store_bj' => Configuration::get('popup_DateBJ', $id_lang), 'store_bm' => Configuration::get('popup_DateBM', $id_lang), 'store_ba' => Configuration::get('popup_DateBA', $id_lang), 'store_b' => Configuration::get('popup_DateB', $id_lang), )); $sql = 'SELECT COUNT(*) FROM '._DB_PREFIX_.'store s' .Shop::addSqlAssociation('store', 's'); $total = Db::getInstance()->getValue($sql); $store_aj = Configuration::get('popup_DateAJ', $id_lang); $store_am = Configuration::get('popup_DateAM', $id_lang); $store_aa = Configuration::get('popup_DateAA', $id_lang); $store_a = Configuration::get('popup_DateA', $id_lang); $store_bj = Configuration::get('popup_DateBJ', $id_lang); $store_bm = Configuration::get('popup_DateBM', $id_lang); $store_ba = Configuration::get('popup_DateBA', $id_lang); $store_b = Configuration::get('popup_DateB', $id_lang); $dateDebut = date($store_aa.'-'.$store_am.'-'.$store_aj.' '.$store_a); $dateFin = date($store_ba.'-'.$store_bm.'-'.$store_bj.' '.$store_b); $dateAuj = date("Y-m-d H:i:s"); echo('date début : '.$dateDebut.'<br>date de fin : '.$dateFin.'<br>date du jour : '.$dateAuj); if (($dateDebut < $dateAuj) && ($dateAuj < $dateFin)){ Db::getInstance()->execute( 'UPDATE `'._DB_PREFIX_.'product` SET active = 1 WHERE id_category_default = 646; UPDATE `'._DB_PREFIX_.'product_shop` SET active = 1 WHERE id_category_default = 646; UPDATE `'._DB_PREFIX_.'category` SET active = 1 WHERE id_category = 646;' ); } else { Db::getInstance()->execute( 'UPDATE `'._DB_PREFIX_.'product` SET active = 0 WHERE id_category_default = 646; UPDATE `'._DB_PREFIX_.'product_shop` SET active = 0 WHERE id_category_default = 646; UPDATE `'._DB_PREFIX_.'category` SET active = 0 WHERE id_category = 646' ); } global $smarty; $page = $smarty->tpl_vars['page_name']->value; if ($total <= 0) return; } return $this->display(__FILE__, 'popup.tpl', $this->getCacheId()); } Link to comment Share on other sites More sharing options...
doekia Posted October 9, 2020 Share Posted October 9, 2020 Un appel dans le header est une méthode qui risque de tuer les performances. Vous parlez de date JJ/MM/AAAA donc un cron quotidien convient parfaitement à cette tâche Link to comment Share on other sites More sharing options...
clem_b Posted October 9, 2020 Author Share Posted October 9, 2020 Mes date sont plus précisément dans le format : AAAA - MM - JJ hh:mm:ss J'ai mis les horaires pour précisé que cela doit se déclenché à la première seconde du date début (00:00:01) et à la dernière seconde de date fin (23:59:59) Je voulais également éviter Cron car je ne sais pas vraiment comment ça marche ... Qu'est ce que doit contenir un Cron ? Link to comment Share on other sites More sharing options...
Eolia Posted October 9, 2020 Share Posted October 9, 2020 Ben vu que vous ne videz jamais votre cache, if (!$this->isCached('popup.tpl', $this->getCacheId())) renverra toujours la même page... Link to comment Share on other sites More sharing options...
clem_b Posted October 9, 2020 Author Share Posted October 9, 2020 Effectivement ça à l'air de fonctionner sans cela ! Merci ! Link to comment Share on other sites More sharing options...
Eolia Posted October 9, 2020 Share Posted October 9, 2020 Par contre vous devriez justement utiliser ce cache pour 24h une fois la requête effectuée justement pou éviter de ralentir toutes les pages de tous vos visiteurs et multiplier les appels à la base de donnée. 1°) Vérifier que la date du jour est supérieure à la dernière date enregistrée (en table configuration par exemple) 2°) si la date est la même, renvoyer le cache 3°) Sinon, exécuter vos requêtes, vider le cache et enregistrer la date en configuration Link to comment Share on other sites More sharing options...
clem_b Posted October 9, 2020 Author Share Posted October 9, 2020 Ok merci de l'info ! Je regarderai ça la semaine pro' Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now