Jump to content

Utilisation des cookies


Recommended Posts

Bonjour,

 

J'ai un petit (bloquant) problème pour passer une variable dans un cookie ...

 

Dans un module, j'ai un fichier à part qui fait un petit traitement :

 

include(dirname(__FILE__).'/../../config/config.inc.php');

include(dirname(__FILE__).'/mon_module.php');

$object = new MonModule();

$object->savecookie();

 

Dans le fichier mon_module.php, j'ai cette méthode

 

public function savecookie() {

global $cookie;

$cookie->test = 'test';

}

 

Et lorsque je fais un debug dans la méthode du controller appellé après (ProductController) :

 

global $cookie;

echo '<pre>';

print_r($cookie);

echo '</pre>';

 

Il n'affiche pas ma variable test ...

 

 

Avez-vous une idée ??

 

Merci d'avance

 

 

Cordialement

Link to comment
Share on other sites

Bonjour FIZ0R, et merci de t’intéresser à mon post !

 

J'ai fait comme ça pour pouvoir déclarer la globale $cookie dans une fonction.

 

J'ai essayé aussi de faire

$cookie->test = 'test';

Mais rien n'y fait ... Ma clé "test" ne passe pas le controller

 

Merci d'avance

Link to comment
Share on other sites

Si je résume la situation,

 

Je mets en place une progressbar dans mon fichier product.tpl du theme.

Jusque là, pas de soucis, la progress bar est bien là.

 

J'utilise le script swfupload.swf (dispo ici pour info : http://code.google.c.../downloads/list) couplé avec swfupload.js

 

il est parametré comme ceci dans mon template :

 

<div class="customizationUploadBrowse">
			<input type="file" name="flash_file{$field.id_customization_field}" id="flash_img{$customizationField}" class="customization_block_input {if isset($pictures.$key)}filled{/if}" />{if $field.re
			<script>
			  $(function() {
				$("#flash_img{$customizationField}").makeAsyncUploader({
				  upload_url: "{$modules_dir}flashprogressbar/upload.php", // Important! This isn't a directory, it's a HANDLER such as an ASP.NET MVC action method, or a PHP file, or a Classic ASP file,
				  flash_url: '{$modules_dir}flashprogressbar/swfupload.swf',
				  button_image_url: '{$modules_dir}flashprogressbar/blankButton.png',
				  button_text: 'Parcourir',
				  //file_size_limit: '50 MB',
				  //debug: true
				  //disableDuringUpload: INPUT[type='submit'],
				});
			  });
			</script>
		  <div class="customizationUploadBrowseDescription">{if !empty($field.name)}{$field.name}{else}{l s='Please select an image file from your hard drive'}{/if}</div></div>

 

Donc ici, on peut voir qu'à la fin de l'exécution, il va appeler le fichier upload.php.

 

Ce fichier contient ces quelques lignes :

 

<?php
include(dirname(__FILE__).'/../../config/config.inc.php');
include(dirname(__FILE__).'/flashprogressbar.php');

$flashprogressbar = new FlashProgressbar();
$flashprogressbar->savecookie('test');
?>

 

Et mon fichier flashprogressbar.php, la fonction savecookie() :

 

public function savecookie($params) {
global $cookie;
$cookie->test = 'test_cookieeeee';  
 }

 

Que je veux appeler dans le debug de la surcharge de mon ProductController

 

<?php
class ProductController extends ProductControllerCore {

 public function displayContent()
 {
//parent::displayContent();
$version = str_replace('.', '', _PS_VERSION_);
self::$smarty->display(_PS_MODULE_DIR_.'flashprogressbar/product_' . $version . '.tpl');
 }

 public function pictureUpload(Product $product, Cart $cart)
 {
global $cookie;
echo '<pre>';
print_r($cookie);
echo '</pre>';
if (!$fieldIds = $this->product->getCustomizationFieldIds())
  return false;
$authorizedFileFields = array();
foreach ($fieldIds AS $fieldId)
  if ($fieldId['type'] == _CUSTOMIZE_FILE_)
	$authorizedFileFields[(int)($fieldId['id_customization_field'])] = 'file'.(int)($fieldId['id_customization_field']);
$indexes = array_flip($authorizedFileFields);
foreach ($_FILES AS $fieldName => $file)
  if (in_array($fieldName, $authorizedFileFields) AND isset($file['tmp_name']) AND !empty($file['tmp_name']))
  {
	$fileName = md5(uniqid(rand(), true));
	if ($error = checkImage($file, (int)(Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE'))))
	  $this->errors[] = $error;

	if ($error OR (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmpName)))
	  return false;
	/* Original file */
	elseif (!imageResize($tmpName, _PS_UPLOAD_DIR_.$fileName))
	  $this->errors[] = Tools::displayError('An error occurred during the image upload.');
	/* A smaller one */
	elseif (!imageResize($tmpName, _PS_UPLOAD_DIR_.$fileName.'_small', (int)(Configuration::get('PS_PRODUCT_PICTURE_WIDTH')), (int)(Configuration::get('PS_PRODUCT_PICTURE_HEIGHT'))))
	  $this->errors[] = Tools::displayError('An error occurred during the image upload.');
	elseif (!chmod(_PS_UPLOAD_DIR_.$fileName, 0777) OR !chmod(_PS_UPLOAD_DIR_.$fileName.'_small', 0777))
	  $this->errors[] = Tools::displayError('An error occurred during the image upload.');
	else
	  $cart->addPictureToProduct((int)($this->product->id), $indexes[$fieldName], $fileName);
	unlink($tmpName);
  }
return true;
 }

}

 

 

Et le retour du debug :


Cookie Object
(
[_content:protected] => Array
	(
		[date_add] => 2012-04-25 13:53:33
		[id_lang] => 2
		[id_currency] => 1
		[viewed] => 7
		[id_guest] => 3
		[id_connections] => 4
		[last_visited_category] => 2
		[id_cart] => 2
	)

[_name:protected] => 8812c36aa5ae336c2a77bf63211d899a
[_expire:protected] => 1337095970
[_domain:protected] =>
[_path:protected] => /prestashop/
[_cipherTool:protected] => Rijndael Object
	(
		[_key:protected] => EZ6W8Bw3sI5dMzgwGKeUEU71RyQrhMRt
		[_iv:protected] => �ɤˬ���r�J'��+
	)

[_key:protected] => yRL0YB7txN5w7e4KX7kMSU8qV3LriB4oopuwCSSYXKuSQmEv2Exqfvoa
[_iv:protected] => QCvLAysb
[_modified:protected] =>
)

 

Voila, j'ai mis le maximum pour essayer au mieux de faire passer mon problème.

 

Merci d'avance à ceux qui pourront m'aider car je suis un peu désespéré ...

 

 

Cordialement,

Link to comment
Share on other sites

Le but est de passer le tableau $_FILES par le biai du cookie à la surcharge de la méthode pictureUpload() pour utiliser le fonctionnement normal de cette méthode ...

 

En passant, j'ai essayé un debug de $cookie->id_lang dans le fichier ou j'essaie d'enregistrer une nouvelle valeur et je le retrouve bien ...

 

Y'a-t-il une autre solution pour passer des valeurs depuis un script quelconque vers un controller ?

 

Peut-être que je fais simplement une mauvais utilisation.

 

 

Merci d'avance

Link to comment
Share on other sites

Je discute un peu seul là ...

 

Je me demande en fait si ce n'est pas parce que le script upload.php est appelé par l'animation flash "swfupload.swf"

Et que ça serait à cause de cela qu'il ne veut pas créer la variable dans $cookie ...

 

J'ai appelé ce fichier upload.php manuellement via mon navigateur et il fonctionne bien ...

 

 

Toujours pas d'idée ??

 

Merci

Link to comment
Share on other sites

Pour les intéréssés, c'est bien à cause du flash ...

 

La solution à été de sérialiser le tableau $_FILES et de l'enregistrer dans un fichier.

Ensuite le désérialiser et l'enregistrer dans le cookie via la méthode preProcess()

 

Résolu

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