webleads-tracker

Api form

Joce [Mediapilote]
Avatar
Bonjour,

Je dois créer pour un client un petit module de mise à jour d'informations coté manage.
Les infos que je dois mettre à jour sont une photo, une légende et une description.

Pour se faire, j'ai créé dans un premier temps une nouvelle rubrique du manage. Ensuite je dois créer le formulaire d'ajout et de mise à jour de ses informations. Le labo m'a indiqué qu'il existait une api pour créer des formulaire de type e-majine.

Le problème c'est que je ne sais absolument pas comment elle fonctionne. Est-ce que quelqu'un aurait déjà réalisé un formulaire de ce type pour me donner quelques pistes ou quelques exemples.

Cordialement.
1 + 1 = 10

Julien
Bonjour Jocelyn,

voici ce que j'ai comme infos :

dans la méthode start, tu mets ;
require_once em_misc::getClassPath().'/core/Emajine_Specif/Emajine_Specif_PublicationMethod.class.php';

$form=Emajine_API::form();

// ensuite tu ajoutes un ou plusieurs éléments du style :
$form->addElement('text','text','text');
$form->addElement('pass','pass','pass');
$form->addElement('chec','chec','chec');
$form->addElement('hidd','hidd','hidd');
$form->addElement('file','file','file');
$form->addElement('subm','subm','subm');
$form->addElement('butt','butt','butt');
$form->addElement('rese','rese','rese');
$form->addElement('radi','radi','radi');
$form->addElement('date','date','date');
$form->addElement('sele','sele','sele');
$form->addElement('zone','zone','zone');
$form->addElement('iPdt','iPdt','iPdt');
$form->addElement('iRes','iRes','iRes');
$form->addElement('mRes','mRes','mRes');
$form->addElement('iRub','iRub','iRub');
$form->addElement('iFam','iFam','iFam');
$form->addElement('iCat','iCat','iCat');
$form->addElement('iTyp','iTyp','iTyp');
$form->addElement('area','area','area');
$form->addElement('iFor','iFor','iFor');
$form->addElement('datD','datD','datD');
$form->addElement('dirC','dirC','dirC');
$form->addElement('cmbM','cmbM','cmbM');
$form->addElement('evTi','evTi','evTi');
$form->addElement('datF','datF','datF');
$form->addElement('time','time','time');
$form->addElement('capT','capT','capT');
$form->addElement('Qcm','Qcm','Qcm');
$form->addElement('sela','sela','sela');
$form->addElement('colo','colo','colo');
$form->addElement('gmCo','gmCo','gmCo');
$form->addElement('tag','tag','tag');
$form->addElement('iBrd','iBrd','iBrd');
$form->addElement('iZon','iZon','iZon');
$form->addElement('iDur','iDur','iDur');
$form->addElement('adsC','adsC','adsC');

// et tu finis par :

$obj=new Emajine_Specif_PublicationMethod(&$form);
return $obj->start();

Dans ton cas, pour choisir une photo dans le Centre de ressources tu peux utiliser un truc du style :
$form->addElement('iRes','image','Quelle image souhaitez vous utiliser ?',array('ressource'=>'form'),true);

Voilà, tout ça repose sur du reverse-engineering bricolé et est donc fourni "as is", sans support :-)

Bon courage
A+
Julien

Joce [Mediapilote]
Avatar
Merci Julien pour ces infos c'est déjà un très bon début.

Cependant il me reste encore quelques interrogations :
    Comment affecter une variable à un élément du formulaire dans le cas d'une modification de données ?

Du type
$form->setValue('adresse',$monadresse);

    Comment faire ce même type de modification pour un champ de type "image" qui est un peu particulier ? Je voudrais que le média que j'ai sélectionné précedemment soit présent par défaut dans mon formulaire.


    Comment traiter le retour des éventuelles erreurs du formulaire ?
1 + 1 = 10

Jérémie
Bonjour,

En fait, je pense qu'il est préférable de ne pas utiliser l'outil l'objet "Emajine_Specif_PublicationMethod" qui est normalement dédié à la gestion de formulaire de configuration des nouveaux types de page.

Puisqu'un bon exemple est plus efficace qu'un long discours, voici une méthode simple pour mettre en place une gestion complète de formulaire dans développement pour e-majine :
// Initialisation du formulaire
$form = Emajine_API::form();
 
// Déclaration des champs
$form->addElement('fieldset', 'Légende du premier fieldset');
 
$form->addElement('text', 'attribut_name_1', 'Libellé du champs 1', array(), true);
 
$form->addElement('fieldset', 'Légende du second fieldset');
 
$form->addElement('select', 'attribut_name_2', 'Libellé du champs 2',
                  array('values' => array('couleur1' => 'Bleu', 'couleur2' => 'Vert')), true);
 
[... Suite de la définition des champs ...]
 
// Le champ de validation
$form->addElement('submit', 'attribut_name_3', 'Valider le formulaire');
 
if ($form->validate()) {
    // Traitement effectué en cas de succès (champs obligatoires renseignés et champs cohérents)
}
 
// Définition des valeurs par défaut du formulaire
$defaultValues = array(
	'attribut_name_1' => 'Valeur par défaut',
	'attribut_name_2' => 'couleur2'
);
 
// Affichage du formulaire (avec gestion des fieldsets)
$form->startFormCreate(false, false, $defaultValues);


En utilisant ce code, les données POST seront envoyées sur la page qui affiche le formulaire. Nous passerons alors, si les champs sont correctement renseignés, dans la partie dédiée au traitement des résultats. Dans le cas contraire, le formulaire sera ré-affiché présentant les différentes erreurs rencontrées.

A bientôt

Jérémie

Julien
Merci Jérémie.
Tu vois, on va y venir à la doc API ;-)

Joce [Mediapilote]
Avatar
Merci Jérémie. C'est exactement ce que je cherchais...

Cependant je fais juste une remarque, il y a une petite erreur dans ton code. Il manque une parenthèse fermante pour le "select" :
$form->addElement('select', 'attribut_name_2', 'Libellé du champs 2',
array('values' => array('couleur1' => 'Bleu', 'couleur2' => 'Vert')), true);
1 + 1 = 10

Jérémie
Merci, j'ai créé le morceau de code à l'aveugle, je suis plutôt pas mécontent de n'avoir fait qu'une erreur ;-).

J'ai corrigé ma portion de code pour avoir un exemple prêt à l'emploi.

Bonne journée

Jérémie

Malory
Bonjour

Je remonte ce thread, car j'ai une petite question.

Quelqu'un saurait-il s'il est possible, avec la méthode addRule(), de tester l'extension d'un fichier sur un input de type file ?

C'est peut-être quelque chose du genre $form->addRule("nom de l'imput", "type (ou mime? ou extension?)", array("xls", "xlsx"));

Quelqu'un a-t-il déjà utilisé cette méthode addRule ?

Cordialement

Thomas [LE KLUB]
Avatar
Bonjour Malory,

Avant d'utiliser la méthode addRule() qui associe une règle de validation à un champ, il faut la créer si elle n'existe pas déjà (je pense que c'est le cas pour toi ici). Pour la créer il faut utiliser la méthode register_rule() mais c'est un peu "tricky" du coup je pense que tu ferais mieux de te tourner vers la labo pour çà.

En espérant avoir aidé,
Thomas

Malory
Merci Thomas pour ta réponse :-).