Jump to content

Problème HelperForm champ "File" sur passage à 1.6 (module perso)


Recommended Posts

Bonjour,

 

Lors de la migration à la 1.6, comme expliqué dans un autre topic (http://www.prestashop.com/forums/topic/320188-probl%C3%A8me-mise-en-forme-helperlist-sur-passage-%C3%A0-16-module-perso/), j'ai rencontré quelques soucis de compatiblité sur quelques modules persos réalisés à partir du canvas proposé par JDanse (encore merci à lui ;) ).

 

Mon dernier petit soucis concerne le HelperForm, et notamment les champs de type "File" (dont je me sert pour gérer les images).

Au chargement de la page, j'obtiens une fatal error :

 

Fatal error: Uncaught exception 'SmartyException' with message 'Unable to load template file '/home/....../modules/blockactualitesnea/views/templates/admin/helpers/uploader/simple.tpl'' in /home/.../monsite/tools/smarty/sysplugins/smarty_internal_templatebase.php:127 Stack trace: #0 /home/....../monsite/classes/helper/HelperUploader.php(288): Smarty_Internal_TemplateBase->fetch() #1 /home/...../monsite/classes/helper/HelperForm.php(154): HelperUploaderCore->render() #2 /home/....../monsite/classes/helper/HelperForm.php(65): HelperFormCore->generate() #3 /home/....../monsite/classes/controller/AdminController.php(2045): HelperFormCore->generateForm(Array) #4 /home/....../monsite/modules/blockactualitesnea/controllers/admin/AdminBlockActualitesNea.php(760): AdminControllerCore->renderForm() #5 /home/...../monsite/classes/controller/AdminController.php(1738): AdminBlockActualitesNeaController->renderForm() #6 /home/....../monsite/classes/controller/Controller.php(180): AdminControllerCore->init in /home/....../monsite/tools/smarty/sysplugins/smarty_internal_templatebase.php on line 127

 

Voici le code de mon HelperForm :

public function renderForm()
{	
		
	$this->fields_form = array(
		'tinymce' => true,
		'legend' => array(
			'title' => $this->l('Nouvelle actualite'),
			'image' => '../img/admin/cog.gif'
		),
		'input' => array(
			array(
				'type' => 'text',
				'label' => $this->l('Date : '),
				'name' => 'mydate',
				'size' => 30,
			),
				
			array(
				'type' => 'text',
					'label' => $this->l('Titre : '),
					'name' => 'titre',
					'size' => 50,
				),
							 
			array(
				'type' => 'textarea',
				'label' => $this->l("Actualité :"),
				'name' => 'text',
				'cols' => 40,
				'rows' => 10,
				 'autoload_rte' => true,
			),
				
				
			array( // <----------------CHAMP QUI POSE PROBLEME
				'type' => 'file',
				'label' => $this->l('Image associée :'),
				'name' => 'OFFRE_IMG',
				'display_image' => true,
				'image' => 'actualites',      

			),
						
			),
			'submit' => array(
				'title' => $this->l('Save'),
				'class' => 'button'
			)
		);

		if (!($obj = $this->loadObject(true)))
			return;
		
				
		return parent::renderForm();
		
	}
		
	
}

Le champ qui pose donc problème est celui-ci :

array( // <----------------CHAMP QUI POSE PROBLEME
				'type' => 'file',
				'label' => $this->l('Image associée :'),
				'name' => 'OFFRE_IMG',
				'display_image' => true,
				'image' => 'actualites',      

			),

(tout fonctionne très bien quand je le commente)

 

Auriez vous des pistes de réflexion pour corriger ce problème ?

(je précise que j'ai tenté de rajouter un .tpl au chemin indiqué dans la fatalerror, mais rien n'y fait)

 

Merci d'avance pour votre aide !

Edited by paradeyes (see edit history)
  • Like 1
Link to comment
Share on other sites

Effectivement j'avais déjà fouillé de ce côté là !

 

Voici ce que dit la classe HelperForm.php pour un champ de type File :

case 'file':
							$uploader = new HelperUploader();
							$uploader->setId(isset($params['id'])?$params['id']:null);
							$uploader->setName($params['name']);
							$uploader->setUrl(isset($params['url'])?$params['url']:null);
							$uploader->setMultiple(isset($params['multiple'])?$params['multiple']:false);
							$uploader->setUseAjax(isset($params['ajax'])?$params['ajax']:false);
							$uploader->setMaxFiles(isset($params['max_files'])?$params['max_files']:null);

							if (isset($params['files']) && $params['files'])
								$uploader->setFiles($params['files']);
							elseif (isset($params['image']) && $params['image']) // Use for retrocompatibility							
								$uploader->setFiles(array(
									0 => array(
									'type'       => HelperUploader::TYPE_IMAGE,
									'image'      => isset($params['image'])?$params['image']:null,
									'size'       => isset($params['size'])?$params['size']:null,
									'delete_url' => isset($params['delete_url'])?$params['delete_url']:null
								)));

							if (isset($params['file']) && $params['file']) // Use for retrocompatibility							
								$uploader->setFiles(array(
									0 => array(
									'type'       => HelperUploader::TYPE_FILE,
									'size'       => isset($params['size'])?$params['size']:null,
									'delete_url' => isset($params['delete_url'])?$params['delete_url']:null,
									'download_url' => isset($params['file'])?$params['file']:null
								)));

							if (isset($params['thumb']) && $params['thumb']) // Use for retrocompatibility							
								$uploader->setFiles(array(
									0 => array(
									'type'       => HelperUploader::TYPE_IMAGE,
									'image'      => isset($params['thumb'])?'<img src="'.$params['thumb'].'" alt="'.(isset($params['title']) ? $params['title'] : '').'" title="'.(isset($params['title']) ? $params['title'] : '').'" />':null,
								)));

							$uploader->setTitle(isset($params['title'])?$params['title']:null);
							$params['file'] = $uploader->render();
						break;

J'ai bien tenté de rajouter les champs "size", "delete_url" dans la définition de mon champ... mais rien n'y fait, toujours la même fatalerror .... :(

Link to comment
Share on other sites

(Je précise que le problème est le même sur un autre module dont le champ "File" ne gère pas une image, mais un simple fichier numérique type PDF ou doc : )

array(
	'type' => 'file',
	'label' => $this->l('Fichier associé :'),
	'desc' => $this->l('PDF, .doc, .zip, ... Taille max 8 Mo'),
	'name' => 'URL_doc',
),
Link to comment
Share on other sites

Bonjour J. Danse, et merci pour ton aide !

J'ai rajouté cette fonction dans le fichier /controllers/admin/AdminModulesController.php, comme tu l'as indiqué, mais j'ai toujours cette fatalerror...

 

J'ai bien vidé les caches, etc etc.... Il y a une manip que j'aurai pu oublier ?

 

Merci encore!

Edited by paradeyes (see edit history)
Link to comment
Share on other sites

Désolé de tous ces messages...
Après avoir testé, j'ai perdu quelques fonctionnalités bien pratiques de ce champ "File", notamment la possibilité de pouvoir supprimer le fichier directement (via la petite "croix" supprimer), ainsi que l'aperçu de l'image (cf. capture ci-jointe)
Est-ce que c'est normal ? ou cela vient-il de mon code? (je me permets de poser la question car vos indications m'ont fait plus avancer en 10 minutes qu'en 2 jours de recherche !)

 

 

post-388583-0-97928700-1396368228_thumb.png

Link to comment
Share on other sites

Est-ce que les $fields_value sont remplies, tiens ? (Je présume que oui, sinon ça générerait une erreur et vous auriez posé la question, je me trompe ? ;-)).

 

Alors, essayez un peu ceci:


					array(
						'type' => 'file',
						'label' => $this->l('Block image'),
						'name' => 'PRODUCTPAYMENTLOGOS_IMG',
						'desc' => $this->l('If your shop\'s payment methods differ from the ones presented in the default image, then you must create your own image with the necessary logos.'),
						'thumb' => '../modules/'.$this->name.'/img/'.Configuration::get('PRODUCTPAYMENTLOGOS_IMG'),
					),

Qu'il faut bien entendu adapter à son code.

  • Like 1
Link to comment
Share on other sites

Merci beaucoup de prendre le temps de me répondre :)

 

Le champ Thumb me permet effectivement de rajouter un aperçu de l'image. Par contre je n'ai toujours pas la fonctionnalité pour supprimer l'image (ou le fichier).

Mais rien de bien méchant, je vais rajouter manuellement un bouton "Supprimer" et cela ira très bien !

 

Merci encore; j'arrête là de vous embêter !

  • Like 1
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...