Jump to content

Développement d'un module, problème pour récupérer les valeurs


Recommended Posts

 

Bonjour,

Je développe actuellement en petit module sur prestashop pour m’entraîner. Avec ce module je souhaite afficher un guide des tailles dans les fiches produits dans les catégories que j'aurais choisi dans le backoffice sur la page de configuration. Mais je rencontre un problème lorsque j'essaie de récupérer les valeurs de mes checkbox de la page de configuration. Je vous met toutes les fonctionnalités que j'ai réalisé. En espérant que vous puissiez me donner une piste pour continuer :)
Dans la fonction Displayform j'essaie de print_r la configuration pour voir ce qu'il y a dedans, mais j'ai l'impression qu'elle est toujours vide, vu qu'elle ne s'affiche pas.

Merci par avance à la commu et bonne journée à vous !

public function install()
{
	if (Shop::isFeatureActive()) {
		Shop::setContext(Shop::CONTEXT_ALL);
	}
	if (!parent::install() ||
		!$this->registerHook('displayProductActions') ||
		!$this->registerHook('displayHeader') ||
		!Configuration::updateValue('DS_SIZEGUIDE_CATEGORY', array())
	) {
		return false;
	}
	return true;
}

public function uninstall()
{
	if (!parent::uninstall() || !Configuration::deleteByName('DS_SIZEGUIDE_CATEGORY')) {
		return false;
	}
	return true;
}

 

public function getContent() {
	$output = null;
	$currentConfiguration = strval(Tools::getValue('DS_SIZEGUIDE_CATEGORY'));

	if (Tools::isSubmit('btnSubmit')) {
		$cats = Category::getCategories( (int)($cookie->id_lang), true, false  );
		$newConfiguration = array();
		
		$checkboxValues = Tools::getValue('choix');
		$i = 0;
		foreach ($cats as $cat) {
			if ($cat['id_category'] > 2) {
				$checkboxValue = array($cat['name'] => $checkboxValues[$i]);
				array_push($newConfiguration, $checkboxValue);
				$i++;
			}
		}
		Configuration::updateValue('DS_SIZEGUIDE_CATEGORY', $newConfiguration);
		$output .= $this->displayConfirmation($this->l('Paramètres mis à jour'));
	}
	return $output.$this->displayForm();	
}

 

public function displayForm(){
	$currentConfiguration = strval(Tools::getValue('DS_SIZEGUIDE_CATEGORY'));
	$cats = Category::getCategories( (int)($cookie->id_lang), true, false  ) ;
	$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
	print_r($currentConfiguration);

	$fields_form = array();
	$fields_form[0]['form'] = array(
		'legend' => array(
			'title' => $this->l('Settings'),
		),
		'input' => array(
			array(
				'type' => 'checkbox',
				'label' => $this->l('Faite votre sélection de catégorie(s) :'),
				'name' => 'choix',
				'values' => array(
					'query' => $lesChoix = array(),
					'id' => 'check_id',
					'name' => 'name'
				),
			),
		),
		'submit' => array(
			'title' => $this->l('Save'),
			'name' => 'btnSubmit',
			'class' => 'btn btn-default pull-right'
		)
	);
	foreach ($cats as $cat) {
		if ($cat['id_category'] > 2) {
			$fields_form[0]['form']['input'][0]['values']['query'][] = array('check_id' => $cat['id_category'], 'name' => $cat['name']);
		}
	}
	$helper = new HelperForm();

	// Module, token and currentIndex
	$helper->module = $this;
	$helper->name_controller = $this->name;
	$helper->token = Tools::getAdminTokenLite('AdminModules');
	$helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name;

	// Language
	$helper->default_form_language = $default_lang;
	$helper->allow_employee_form_lang = $default_lang;

	// Title and toolbar
	$helper->title = $this->displayName;
	$helper->show_toolbar = true;
	$helper->toolbar_scroll = true;
	$helper->submit_action = 'submit'.$this->name;
	$helper->toolbar_btn = array(
		'save' => array(
			'desc' => $this->l('Save'),
			'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name.
			'&token='.Tools::getAdminTokenLite('AdminModules'),
		),
		'back' => array(
			'href' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules'),
			'desc' => $this->l('Back to list')
		)
	);

	// Load current value
	$helper->fields_value['DS_SIZEGUIDE_CATEGORY'] = Configuration::get('DS_SIZEGUIDE_CATEGORY');
	$helper->fields_value['check_id'] = false;

	return $helper->generateForm($fields_form);
}

 

Edited by Fayrefiive (see edit history)

Share this post


Link to post
Share on other sites

Merci Alexandre, cela m'a permis de voir ce qui ne vas pas.

J'ai dump d'abord :

var_dump(Tools::getValue('choix'));


J'ai donc trois problèmes :

Le premier étant que peut importe la checkbox que j'ai sélectionné, je récupère toujours la même chose, ce qui est un peu embêtant pour différencier mes différentes checkbox :

array(1) { [0]=> string(2) "on" }

Mon second est que je ne voit pas comment chargé ces données ensuite pour checker les chekbox en fonction des valeurs sauvegardés, quand j'ai un champ de texte j'y arrive sans problème. Je devrais donc boucler sur cette config pour ensuite pre-check les checkbox. Mais comment pre-check une checkbox ?

Mon troisième problème est : Même si actuellement les données des boutons ne correspondent pas, j'ai essayé de les ajouté à la configuration actuel. Quand je dump mon $newConfiguration j'ai ça :

array(3) { [0]=> array(1) { ["Vêtements"]=> string(2) "on" } [1]=> array(1) { ["Alimentation et boissons"]=> NULL } [2]=> array(1) { ["Mobilier et déco"]=> NULL } }

Mais ensuite j'ai voulu dump la config pour voir ce qu'il y avait dedans, et ça n'ajoute pas la totalité de mon $newConfiguration :

array(1) { ["Vêtements"]=> string(2) "on" }

Pourquoi un seul array() est ajouté ?

Cordialement

Edited by Fayrefiive (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

J'ai réglé quasiment tous les problèmes, sauf un ^^

Mon problème est le 3ème du post précédent, je récupère un array() contenant mes checkbox checked ou non var_dump($newConfiguration);

array(3) { [0]=> array(1) { ["Vêtements"]=> bool(true) } [1]=> array(1) { ["Alimentation et boissons"]=> bool(false) } [2]=> array(1) { ["Mobilier et déco"]=> bool(false) } }

Mes quand j'update ma configuration avec cette nouvelle configuration j'obtiens seulement un seul array() : var_dump(Configuration::get('DS_SIZEGUIDE_CATEGORY'))

array(1) { ["Vêtements"]=> bool(false) }


Voilà mon code actuel :

public function getContent() {
	$output = null;
	
	if (Tools::isSubmit('btnSubmit')) {
		$cats = Category::getCategories( (int)($cookie->id_lang), true, false  );
		$newConfiguration = array();
		
		foreach ($cats as $cat) {
			if ($cat['id_category'] > 2) {
				$id = "choix_checkbox_" . $cat['id_category'];
				if (Tools::getValue($id)) {
					$value = array($cat['name'] => true);
					array_push($newConfiguration, $value);
				}
				else {
					$value = array($cat['name'] => false);
					array_push($newConfiguration, $value);
				}
			}
		}
		var_dump($newConfiguration);
		Configuration::updateValue('DS_SIZEGUIDE_CATEGORY', $newConfiguration);
		$output .= $this->displayConfirmation($this->l('Paramètres mis à jour'));
		var_dump(Configuration::get('DS_SIZEGUIDE_CATEGORY'));
	}
	return $output.$this->displayForm();	
}

 

Share this post


Link to post
Share on other sites

il y a des ' en trop dans 2 lignes 

$image = Product::getCover($p['$product.id_product']);

et

$file_webp = (dirname(__FILE__).'/webp-img/'.$p['$product.id_product'].'.webp');

 

met 

$image = Product::getCover($p[$product.id_product]);

et 

$file_webp = (dirname(__FILE__).'/webp-img/'.$p[$product.id_product].'.webp');

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More