Modifier une variable dans une session

  • Posts: 99
  • Thank you received: 3
10 years 4 months ago #135923

-- HikaShop version -- : 2.2.2
-- Joomla version -- : 3.2
-- PHP version -- :5.3.17

Bonjour

Comme deja exposé dans un topic precedent, vous proposiez de modifier la variable de session adresse de livraison avec:

$app=JFactory::getApplication();
		$app->setUserState('com_hikashop.shipping_address',$address_id);
http://www.hikashop.com/forum/5-support-en-francais-french-support-/863024-forcer-une-adresse-de-livraison.html

J'essaye de mettre en place cela mais rien ne se passe.

Voici ma fonction onBeforeOrderCreate que j'ai creer, et je ne vois pas l'erreur.
function onBeforeOrderCreate(&$order, &$do){ 

 $app = JFactory::getApplication(); 
 $shipping_method = $app->getUserState('com_hikashop.shipping_data'); 

	if ($shipping_method[0]->id_relais!='0') //Mise en memoire de l'adresse et creation de l'adresse du relais
	{
		$user_id = hikashop_loadUser();//chargement de l'id du client
		$address_company=$shipping_method[0]->shipping_name;
		$address_street=$shipping_method[0]->adresse1;
		$address_street2=$shipping_method[0]->adresse2;
		$address_post_code=$shipping_method[0]->cp;
		$address_city=$shipping_method[0]->ville;
		$address_country=$shipping_method[0]->pays;
		$address_published='0';
		$address_default='0';

			
		$db =& JFactory::getDBO(); // enregistrement de l'adresse du relais dans la base de données
		$query = "INSERT INTO ".hikashop_table('address')." (address_user_id,address_company, address_street, address_street2, address_post_code, address_city, address_country, address_published, address_default)
		VALUES ('".$user_id."', '".$address_company."', '".$address_street."', '".$address_street2."', '".$address_post_code."', '".$address_city."', '".$address_country."', '0', '0' )";
		$db->setQuery( $query );
		$db->query();
		
		$db = JFactory::getDBO(); //Recuperation l'id de l'adresse du client qui vient d'etre enregistrer
		$db->setQuery('SELECT address_id FROM '.hikashop_table('address').' WHERE address_user_id = '.$user_id. ' ORDER BY address_id DESC LIMIT 1');
		$address_id = $db->loadResult(); 

		$app=JFactory::getApplication();//Rajout l'ID de l'adresse dans la session
		$app->setUserState('com_hikashop.shipping_address',$address_id); 

	}


$order->id_relais = $shipping_method[0]->id_relais; 
$order->adresse_relais = $shipping_method[0]->adresse_relais; 

}

Merci par avance pour votre aide.

Nicolas


Joomla 3
Last edit: 10 years 4 months ago by nilegoff.

Please Log in or Create an account to join the conversation.

  • Posts: 99
  • Thank you received: 3
10 years 4 months ago #135938

Je me reponds à moi meme apres avoir pris un peu recule et j'ai remplacé

$app->setUserState('com_hikashop.shipping_address',$address_id);
par
$order->order_shipping_address_id=$app->setUserState(HIKASHOP_COMPONENT.'.shipping_address',$address_id);

Cela a l'air de fonctionner.
Pouver vous me confirmer que le code reste sur?

Merci par avance

Nicolas


Joomla 3

Please Log in or Create an account to join the conversation.

  • Posts: 81566
  • Thank you received: 13075
  • MODERATOR
10 years 4 months ago #135942

Oui c'est la solution. Dans le onBeforeOrderCreate, la variable de session est déjà récupérée par le système pour créer $order qui vous est passé avant la sauvergarde de la commande. Il faut donc directement assigner la valeur dans $order comme vous avez devinez.

Please Log in or Create an account to join the conversation.

  • Posts: 99
  • Thank you received: 3
10 years 4 months ago #135992

Par contre, après quelques tests, je me suis rendu compte que je perdais, une fois la commande enregistrée, la variable de session concernant l'adresse d'expedition par defaut à pripori.
Si je vais sur historique de commande, tous les prix passe en HT. Si je repasse une autre commande, il me faut choisir l'adresse par 2 fois.

Voyez vous où je peux perdre les informations?

Nicolas


Joomla 3

Please Log in or Create an account to join the conversation.

  • Posts: 81566
  • Thank you received: 13075
  • MODERATOR
10 years 4 months ago #136116

Cela ne devrait pas être le cas, sauf si vous utiliser le mode "guest". En ce cas, les informations de l'utilisateur sont enlevés de la session après la commande et c'est donc normal.
Cela se fait avec le code:
$app->setUserState( HIKASHOP_COMPONENT.'.user_id', 0);
dans components/com_hikashop/controllers/checkout.php

Please Log in or Create an account to join the conversation.

Time to create page: 0.062 seconds
Powered by Kunena Forum