Ajouter un type de formulaire ?

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Je commence à peine sur Drupal (6.2 actuellement), et j'ai réussi à implémenter un système de note sur des nodes (configurable en admin).

Actuellement l'utilisateur loggué peut, lorsqu'il est sur le node sélectionné, le noter. pour l'instant il le note en écrivant un chiffre entre 0 et 5, j'aimerais mettre un slider (JQuery UI par exemple) afin de le rendre plus propre. Alors ma question est :

Est-il possible de rajouter un type d'élément de formulaire ?

Mon code :

<?php
/**
 * Define the rate form.
 */
function rate_entry_form($form_state, &$node) {
 
// Define a fieldset
 
$form['rate'] = array(
   
'#type' =>                'fieldset',
   
'#title' =>               t('Ratings'),
  );

 
// Define a radio button inside the fieldset
 
$form['rate']['mark'] = array(
   
'#type' =>                '<strong>textfield</strong>',
   
'#title' =>               'Rating',
   
'#default_value' =>       isset($node->rating) ? $node->rating : '',
   
'#description' =>         t('Rate this article (from 0 to 5) if you think it deserves a mark.'),
  );

 
// Save node ID
 
$form['rate']['nid'] = array(
   
'#type' =>                'value',
   
'#value' =>               $node->nid,
  );

 
// Define a submit function
 
$form['rate']['submit'] = array(
   
'#type' =>                'submit',
   
'#value' =>               t('Rate !'),
  );

  return
$form;
}
?>

J'aimerais mettre un type slider à la place de textfield, est ce possible ou dois-je m'y prendre autrement ?

Cordialement,

NoTra.

Forum : 

Si si bien sur, mais ma question n'est pas "comment ajouter un système de notation ?" ;)
Simplement, comment créer un type "slider" ? Je fais ça pour m'entrainer, uniquement pour savoir comment faire. J'imagine qu'il doit y avoir un moyen simple, mais je ne trouve pas comment faire, mise à part en faisant des choses "pastrèspropre"...

Ce que je ne voudrais pas faire :)

Bonjour!

Pour faire propre il y a 2 bonnes manières de procéder:

–1) (ce qui est le cas ici) l'ajout visuel ou dynamique n'est pas nécessaire, c'est juste du "pimp", et cela se gère au niveau du theming.

–2) Le formulaire est plus complexe et requiert des éléments graphiques (css) ou dynamiques (js) pour fonctionner et cela se fera au niveau du module.

Maintenant les explications:
Pour les deux cas considérons que le champ du formulaire est un select (plus propre^^) offrant les possibilités (1,2,3,4,5). Il est bien de faire les choses correct à ce niveau car le javascript viens s'ajouter en "déco". Ainsi le formulaire fonctionnera bien même avec js désactivé.

$form['rate']['mark'] = array(
  '#type' => 'select',
  '#title' => 'Rating',
  '#default_value' => isset($node->rating) ? $node->rating : 0,
  '#options' => array(0,1,2,3,4,5),
  '#description' => t(‘Rate this article (from 0 to 5) if you think it deserves a mark.’),
)

–1)
Tu crées un fichier .js dans ton thème dans lequel tu vas cacher le select, ajouter le slider, et modifier le select au changement du slider. ( comme dans l'exemple suivant: http://jqueryui.com/demos/slider/#hotelrooms en rajoutant $('#monselect').hide(); )

Dans template.php tu crées une fonction de theming de ton formulaire auquel tu ajoutes simplement:

drupal_add_library('system', 'ui.slider');
drupal_add_js(drupal_get_path('theme','mon_theme_super_cool').'/chemin_vers_le.js', 'file');

–2)
Tu utilises le même fichier js que précédemment, sauf que tu rajoutes à la fin:

$form['#attached'] = array (
  'js' => array(
    'type' => 'file',
    'data' => drupal_get_path('module','mon_module_super_cool').'/chemin_vers_le.js',
   ),
);

Bonjour,

Je suis exactement dans la même situation.
J'ai un fieldset contenant plusieurs formulaires, dont un qui est un select, que je souhaiterai afficher sous la forme d'un range slider (typiquement http://jqueryui.com/demos/slider/#range ).

Malheureusement, mes compétences js sont plus que limitées, et j'apprécierai avoir quelques précisions par rapport au message de kustolovic.

Je travaille sous Drupal 7.12

Tu crées un fichier .js dans ton thème dans lequel tu vas cacher le select, ajouter le slider, et modifier le select au changement du slider.

Quelqu'un pourrait-il me donner plus de détail concernant ces étapes ?!

Merci d'avance !