Jump to content

Récupérer les var smarty créer pour en faire des var php [1.6.1.4]


clem_b

Recommended Posts

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

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

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

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

  • 3 weeks later...

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

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

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

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

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...