Jump to content

ceadreak

Members
  • Posts

    22
  • Joined

  • Last visited

About ceadreak

  • Birthday 01/01/1

ceadreak's Achievements

Newbie

Newbie (1/14)

0

Reputation

  1. En parlant toujours de la surchage, j'ai surchargé la méthode preProcess() toujours du productController. Ma surcharge consiste à effectuer un traitement sur un fichier. En gros, ce traitement va checker si un fichier temp existe pour l'utilisateur, si oui, il met son contenu dans un cookie, ensuite il le supprime. Le problème est qu'il passe aléatoirement dans ma condition ... Parfois il l'exécute, parfois pas ... Même si le fichier existe, il ne passe pas forcément dedans ... J'ajoute que cela se produit sur un hébergement. En local ça marche très bien ... Auriez-vous une idée là dessus ? Ci-dessous, l'override proprement dit : public function preProcess() { global $cart; if ($id_product = (int)Tools::getValue('id_product')) $this->product = new Product($id_product, true, self::$cookie->id_lang); //if (file_exists(_PS_TMP_IMG_DIR_.'pictures_'.$_SERVER['REMOTE_ADDR'].'_'.(int)($id_product).'.tmp')) { if (file_exists(_PS_TMP_IMG_DIR_.'pictures_'.$_SERVER['REMOTE_ADDR'].'.tmp')) { //$fp = fopen(_PS_TMP_IMG_DIR_.'pictures_'.$_SERVER['REMOTE_ADDR'].'_'.(int)($id_product).'.tmp', 'r'); $fp = fopen(_PS_TMP_IMG_DIR_.'pictures_'.$_SERVER['REMOTE_ADDR'].'.tmp', 'r'); $data = fgets($fp); fclose($fp); $data = unserialize($data); foreach ($data as $value) { self::$cookie->$value['varname'] = $value['identifier']; } //@unlink(_PS_TMP_IMG_DIR_.'pictures_'.$_SERVER['REMOTE_ADDR'].'_'.(int)($id_product).'.tmp'); @unlink(_PS_TMP_IMG_DIR_.'pictures_'.$_SERVER['REMOTE_ADDR'].'.tmp'); } //----------debug------------ echo '<pre>'; print_r(self::$cookie); echo '</pre>'; if (Tools::isSubmit('ajax')) { if (Tools::isSubmit('submitCustomizedDatas')) { //$this->pictureUpload($this->product, $cart); $this->textRecord($this->product, $cart); $this->formTargetFormat(); } if (count($this->errors)) die(Tools::jsonEncode(array('hasErrors' => true, 'errors' => $this->errors))); else die(Tools::jsonEncode(array('hasErrors' => false, 'conf' => Tools::displayError('Customization saved successfully.')))); } if (!Validate::isLoadedObject($this->product)) { header('HTTP/1.1 404 Not Found'); header('Status: 404 Not Found'); } else $this->canonicalRedirection(); FrontController::preProcess(); } Merci d'avance. Cordialement,
  2. Merci pour votre complément DevNet, cela marche à merveille Effectivement, il serait dommage de se séparer des méthodes de base ... Cordialement,
  3. 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
  4. Autant pour moi il suffit d'enlever le parent ...
  5. Bonjour, Je me posais une petite question quant à la surcharge de controller. Ici, j'ai surchargé la méthode displayContent du productController. Rien de bien compliqué mais surprise ... Mon contenu s'affiche 2x. Effectivement, il passe dans la méthode displayContent du productController ainsi que dans la méthode displayContent de ma surcharge ... Comment éviter cela ? Merci d'avance
  6. I have one solution for interested people. Save the $_FILES serialized array in a file ... That's not very clean but it works !
  7. Hi CartExpert.net and thank you for your interrest to my post. I use flash to select files and display the progressbar. That's not for a dedicated server, else I could have used php-apc extension ... Here I can't use php-apc or php-uplaodprogress. Thanks for your help !
  8. Maybe that's because I call the upload.php script from flash animation "swfupload.swf" ?? When I call upload.php script manually from my browser, it works perfectly ... I don't understand ... Thanks for your help !
  9. 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
  10. Hello all, I am currently make a module for a client and I have a strange bug ... The module is simply a flash progress bar for replace the simple "browse file type" into the product.tpl (into the product customization) but I can't recover my $_FILES values in the ProductController.php. I try to pass the $_FILES array in the $cookie global var. With a debug into the ProductController, function PictureUpload(), I can see my cookie values but not the $_FILES value ! In my code down, you can see I try to get a test value in the PictureUpload() function and display it in a debug array. Please watch my test here and tell me what's wrong ... Thanks in advance Ps : I use the swfupload.swf script to display my progressbar ( http://code.google.c.../downloads/list) Here is my 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> You can see in the swfupload config, I call a script "upload.php" Upload.php contains : <?php include(dirname(__FILE__).'/../../config/config.inc.php'); include(dirname(__FILE__).'/flashprogressbar.php');[/font] include(dirname(__FILE__).'/../../init.php');[/font] global $cookie; $cookie->test = 'test'; ?> And the productController.php overload with my debug : <?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; } } The 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] => ) Please help me ... Best regards
  11. 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
  12. 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,
  13. 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
×
×
  • Create New...