Forum CMS Made Simple FR

Version complète : [Résolu] Module products, UDT et upload d'image...
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.10.2
#~ Url du site : www.nextrides.yannlamy.com
#~ Hébergeur / Soft : hébergeur pas cher
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.10.2
#~ Installed Modules:
#~ CMSMailer: 2.0.2
#~ CMSPrinting: 1.0
#~ FileManager: 1.2.0
#~ MenuManager: 1.7.7
#~ MicroTiny: 1.1.1
#~ ModuleManager: 1.5.3
#~ News: 2.12.3
#~ Search: 1.7
#~ ThemeManager: 1.1.4
#~ CGExtensions: 1.27.1
#~ FrontEndUsers: 1.16.4
#~ SelfRegistration: 1.6.13
#~ CustomContent: 1.7.3
#~ CGSmartImage: 1.6.1
#~ CGSimpleSmarty: 1.4.10
#~ JQueryTools: 1.0.10
#~ Products: 2.15.1
#~ CGContentUtils: 1.2.1
#~ CGGoogleMaps: 2.1.4
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template: false
#~ output_compression: false
#~ max_upload_size: 6000000
#~ default_upload_permission: 664
#~ url_rewriting: mod_rewrite
#~ page_extension: .html
#~ query_var: page
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale:
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.3.8
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 0
#~ E_DEPRECATED: 0
#~ memory_limit: 64M
#~ max_execution_time: 90
#~ output_buffering: On
#~ safe_mode: Off (Faux)
#~ file_uploads: On (Vrai)
#~ post_max_size: 10M
#~ upload_max_filesize: 6M
#~ session_save_path: /tmp (1777)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ Server Information:
#~ Server Api: cgi-fcgi
#~ Server Db Type: MySQL (mysql)
#~ Server Db Version: 5.1.56
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Bonjour à tous,

j'utilise le module products pour générer des petites annonces.
Pour que les utilisateurs enregistrés puissent poster une annonce, j'ai donc créer une udt qui est un formulaire en 2 parties dans lequel toutes les infos concernant l'annonce sont demandées.
ces infos correspondent biensûr aux champs définis dans le module.

je vérifie toutes les données entrées puis, j'enregistre toutes ces données dans la base de données comme le fait la page do.addproduct.php du module.

la seule chose que je n'ai pas réussi à gérer pour le moment, c'est l'upload d'images (j'en ai 3)
je me suis référé à la page do.addproduct.php et ai repris le code pour le traitement des images, ce qui donne:

Code :
$errors = array();
$destdir = cms_join_path($gCms->config['uploads_path'],$this->GetName(),'product_2'); //2 car product 2 de test, sera dynamique ensuite

for($i=1; $i<=3; $i++){ //boucle pour chaque image, 3 au total
$image = "image".$i;
$image_val = $_FILES[$image];
$fid = 8 + $i; // car je connais l'id de mes champs images qui sont 9, 10, 11
$attr = 'default'; // aucun attribut

if(!empty($_files[$image]['name'])){ // si image existe on traite

$res = $this->HandleUploadedImage($id,$image_val,$destdir,$errors,'field-'.$fid,$attr);
                        if( $res === FALSE )
                        {
                          $v = null;
                        }
                        else if( $res === TRUE )
                        {
                          true;
                        }
                        else
                        {
                          $v = $res;
                        }
echo $v;// affiche résultat pour confirmation (provisoire bien entendu)
}
}

je me retrouve avec cette erreur:

Fatal error: Using $this when not in object context in /home/yannlamy/public_html/nextrides/lib/classes/class.usertagoperations.inc.php(260) : eval()'d code on line 545

donc, je suppose que quelquechose n'a pas été instancié, mais quoi?

la seule chose que j'appelle en début d'udt c'est smarty et le module product

Code :
$gCms = cmsms();

$products = cms_utils::get_module('Products');

comme l'upload d'image utilise CGextensions est-ce qu'il faut instancier son appel aussi ou le fait d'appeler products, ça fait automatiquement vu qu'il en dépend?

bref, si quelqu'un pouvait m'aider à résoudre ce soucis, ce serait super!

merci
Code :
Fatal error: Using $this when not in object context in /home/yannlamy/public_html/nextrides/lib/classes/class.usertagoperations.inc.php(260) : eval()'d code on line 545

comme tu l'as deviné $this n'a pas été initialisé par ce que c'est un code issu d'un module, $this représentant l'instance du module

donc remplacer $this par $products APRES avoir initialisé $products comme tu le fais.

Change déjà cela et regarde la suite
Bess,

j'ai essayé de changer le $this contenu dans le code par $products mais, même erreur!
donc, je suppose que quelquechose d'autre n'a pas été initialisé!
ben tu regarde quelle ligne déconne en commentant ton code et en décommentant au fur et à mesure
déjà, je suis con, j'avais pas vu le this dans la première ligne qui permet de définir $destdir.
une fois ça corrigé, plus de message d'erreur par contre il ne se passe rien pour l'image!
Ca marche!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

En fait, il fallait mettre ça:

Code :
$errors = array();
$destdir = cms_join_path(cmsms()->config['uploads_path'],$products->GetName(),'product_2');

for($i=1; $i<=3; $i++){
$image = "image".$i;
$attr = 'default';


if(!empty($_FILES[$image]['name'])){

$res = $products->HandleUploadedImage($id,$image,$destdir,$errors,'',$attr);
                        if( $res === FALSE )
                        {
                          $v = null;
                        }
                        else if( $res === TRUE )
                        {
                          true;
                        }
                        else
                        {
                          $v = $res;
                        }
}

où $image est le nom du champs image et pas l'image uploadé et virer le 'field'.$fid puisque je l'utilise pas dans mon nom de champs!

Merci Bess(t) pour le tuyau sur le this aussi Wink
je t'en prie Smile