Jump to content

Ajout checkbox marques (BO) ?


Recommended Posts

Bonjour à tous,

 

je suis actuellement sur un développement spécifique sur PS 1.5 nécessitant l'ajout d'un checkbox dans le BO, sur la page de modification/création des marques (manufacturers).

 

Pour un bouton radio, j'ai réussi après m'être baladé dans le contrôleur admin et dans la classe Manufacturer.

 

Par contre, impossible de comprendre comment valider et traiter les données du checkbox venant du formulaire... :wacko:

 

Voici l'ajout réalisé en override du contrôleur :

 


$asso_causes = array(
           array(
...
... définition des valeurs
));

array(
                   'type' => 'checkbox',
                   'label' => $this->l('Causes:'),
                   'name' => 'asso_causes[]',
                   'lang' => true,
                   'values' => array(
                       'query' => $asso_causes,
                       'id' => 'id_cause',
                       'name' => 'name'
                   )
               )

 

Jusqu'à là, pas de soucis, l'aspect visuel est parfait !

 

Par contre, si quelqu’un pourrait m'éclairer vis-à-vis de la validation et insertion des données ça serait vraiment cool !

 

Merci d'avance ;)

Link to comment
Share on other sites

Bonjour,

Les checkbox sont un cas qui n'est pas géré de façon standard, vous allez stocker les résultats dans une table d'association ou autre donc l'insertion ne se fera pas de façon automatique.

 

Tout d'abord pour votre champ quelques modifications : 'lang' => true et asso_causes[]

array(
'type' => 'checkbox',
'label' => $this->l('Causes:'),
'name' => 'asso_causes',
'values' => array(
	'query' => $asso_causes',
	'id' => 'id_cause',
	'name' => 'name'
)
)

 

Ensuite, il faut que votre tableau $asso_causes contienne une clé avec la valeur de chaque checkbox pour qu'elles puissent être cochées automatiquement. Ces valeurs seront exploitées par le code suivant que vous devez ajouter après la déclaration de $asso_causes. Ici j'ai choisi la clé "value".

 

foreach ($asso_causes as $cause)
$this->fields_value['asso_causes_'.$cause['id_cause']] = $cause['value'];

 

Enfin, pour gérer la validation et la sauvegarde, définissez votre propre méthode qui sera appelée en ajoutant ce code :

 

function processSave()
{
parent::processSave();
$this->maMethode();
}

 

A noter que vous n'allez pas récupérer en POST un tableau asso_causes[] mais différentes valeurs asso_causes_X où X sont les id présentes dans le tableau d'entrée.

 

J'espère que c'est suffisamment clair, n'hésitez pas à poser des questions :)

 

Thomas

Link to comment
Share on other sites

Bonjour,

 

Tout d'abord merci d'avoir pris du temps pour me répondre, c'est sympa ;)

J'ai tout de suite mis en application votre technique et ça à l'air de fonctionner. J'ai juste une différence au niveau du résultat (j'obtiens un tableau de checkbox cochées)...

 

Voici mes bouts de code ajoutés au contrôleur :

 

$asso_causes = array(
		array(
			'id' => 'planete',
			'val' => 'planete',
			'name' => $this->l('Planete')
		),
		array(
			'id' => 'developpement',
			'val' => 'developpement',
			'name' => $this->l('Developpement')
		),
		array(
			'id' => 'education',
			'val' => 'education',
			'name' => $this->l('Education')
		),
		array(
			'id' => 'enfance',
			'val' => 'enfance',
			'name' => $this->l('Enfance')
		),
		array(
			'id' => 'solidarite',
			'val' => 'solidarite',
			'name' => $this->l('Solidarite')
		),
		array(
			'id' => 'sante',
			'val' => 'sante',
			'name' => $this->l('Sante')
		),
		array(
			'id' => 'droitshumains',
			'val' => 'droitshumains',
			'name' => $this->l('Droitshumains')
		)
	);

	foreach ($asso_causes as $cause)
		$this->fields_value['asso_causes_'.$cause['id']] = $cause['val'];

array(
				'type' => 'checkbox',
				'label' => $this->l('Causes:'),
				'name' => 'asso_causes',
				'lang' => true,
				'values' => array(
					'query' => $asso_causes,
					'id' => 'id',
					'name' => 'name'
				)
			)


public function insertSQLCauses()
{
	print_r(Tools::getValue('asso_causes'));
	die("DEBUG");
}

public function processSave()
{
	parent::processSave();
	$this->insertSQLCauses();
}

 

Voila ce que m'affiche ce test lors de l'enregistrement de la page :

 

Array ( [0] => planete [1] => developpement ) DEBUG

 

En gros, je récupère un tableau avec les valeurs cochées.

 

Moi ça m'arrange car je compte sérialiser le tableau et le stocker dans un champ en base créé pour l'occasion dans la table manufacturer. Cependant, vous me disiez que je n'aurais pas du avoir un tableau en résultat ?

 

Voila où j'en suis :)

 

Petite question : comment faire dans ce cas pour afficher les checkbox cochées lors de l'affichage de la page de modification d'une marque ?

Link to comment
Share on other sites

En fait le champ "val" de chaque checkbox doit contenir un booléen qui indique si la case est cochée ou non (les strings sont évaluées à "true" c'est pourquoi toutes les checkbox sont cochées dans votre cas).

Vous aurez besoin d'une fonction qui récupère les valeurs sérialisées et remplit les champs "val".

Link to comment
Share on other sites

Re,

 

j'ai l'impression que l'override du contrôleur /admin/AdminManufacturersController.php ne fonctionne pas.

Seules les modifications que je fais dans le contrôleur Core sont prises en compte mais pas celles de l'override...

 

Une idée là dessus ?

Link to comment
Share on other sites

C'est exact, le problème venait de la fonction renderForm() qui est un eu particulière.

Je vous ai expliqué le soucis par MP ;)

 

Tout est bon là, j'ai réussi a boucler le développement de la fonctionnalité au niveau du BO.

 

Merci pour votre aide !

Link to comment
Share on other sites

  • 1 year later...

Bonjour,

J'ai un peu le même problème avec l'override du contrôleur /admin/AdminManufacturersController.php qui ne fonctionne pas.

Je veux simplement ajouter un champ dans la fonction renderForm() et seule les modifications dans le contrôleur Core fonctionne.

En quoi la fonction renderForm() est particulière ?

 

Merci d'avance

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