Surcharger un module

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,

j'utilise le module views_charts sur mon Drupal 6.
J'ai besoin de surcharger le module pour créer des champs supplémentaires dans mon formulaire : un input et une select.

Au départ, j'avais donc créé un nouveau module : toto_views_charts avec un fichier .info et un autre fichier toto_views_charts.module.

Dans mon .module, j'avais créé un hook_form_alter me permettant de créer mon input. Jusque là, aucun problème.
Cependant, quand j'ai récupéré le code dans views_charts.module pour coller la modification dans mon nouveau module, il y a eu un problème. Voici mon code :

$form['individual_chart_title'] = array(
      '#type' => 'select',
      '#title' => t('Title for each individual chart'),
      '#description' => t('This field will be used as title of individual graphs'),
      '#default_value' => $def_val_series,
   '#options' => $views_field,
   '#required' => TRUE,
  '#multiple' => FALSE,
    );

Mes variables $def_val_series et $views_field sont définies dans mon module de base comme ceci :

$curr_disp = $this->view->current_display;
    $views_fields = $this->_get_fields();

    $def_val_series = $this->options['views_charts_series_fields'];
    $def_val_series = (empty($def_val_series) || !is_array($def_val_series)) ?
      array(t('-- None --')) :
     $def_val_series;

Mais je ne sais pas comment les appeler depuis mon nouveau module. J'ai essayé en recopiant simplement ce code dans mon nouveau module, mais j'ai l'impression de m'y perdre un peu. Je ne sais pas exactement quels fichiers doivent être créés avec quel code dedans.

Avez-vous une solution ? :)
Merci !

Forum : 
Version de Drupal : 

Bonjour,
Si la seule chose que tu veux faire c'est de créé des champs supplémentaires tu étais sur la bonne voix.
Il te suffit de créer un hook_form_alter dans un module séparé, de rajouter tes champs et une fonction de submit (pour l'enregistrement de ces champs).
Cela devrait suffir a ajouter les champs dans ton formulaire.

Je ne sais pas si je réponds à la question.

Cordialement,
AyA

Merci AyA pour ta réponse. Cependant, j'ai un petit problème avec le hook_form_alter.

Je m'explique :

$form['individual_chart_title'] = array(
      '#type' => 'select',
      '#title' => t('Title for each individual chart'),
      '#description' => t('This field will be used as title of individual graphs'),
      '#default_value' => $def_val_labels,
      '#options' => $views_fields,
      '#required' => TRUE,
      '#multiple' => FALSE,
    );

Ce code me permet de créer une select. Cependant, on utilise 2 variables $views_field et $def_val_labels qui elles, sont définies dans mon module de base "views_charts" mais pas dans mon nouveau module.

Le code associé dans "views_charts" à la création de ces variables :

function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state); 

    $curr_disp = $this->view->current_display;
    $views_fields = $this->_get_fields();

    $def_val_series = $this->options['views_charts_series_fields'];
    $def_val_series = (empty($def_val_series) || !is_array($def_val_series)) ?
      array(t('-- None --')) :
      $def_val_series;

Donc comment je pourrais appeler ces 2 variables ? Est-ce que je dois recopier la fonction options_form(...) ? Est-ce qu'il y a un moyen de faire appel à ces variables via mon nouveau module, vers l'autre module ?

Dans le module views_charts, il y a différentes fonctions où on trouve des modifications. Donc il faudrait que je surcharge ces fonctions dans mon nouveau module sans pour autant écraser ce qui est défini dans views_charts.

Comment puis-je faire tout ça ? Tout est faisable avec hook_form_alter ?
Dois-je sinon développer un .inc, .views.inc, .module, views_plugin_style_charts.inc dans mon nouveau module pour hériter de views_charts ?

Merci !

Bonjour,

une petite précision : la fonction $this->_get_fields() est créée dans mon module views_charts (views_plugin_style_charts.inc pour le fichier).

Comment pourrais-je dire à mon nouveau module que la fonction est bien dans le module qu'il doit surcharger ? Comment mettre la notion d'héritage dans mon module ?

Est-ce que je reste sur le hook_form_alter() ou est-ce que je crée un nouveau plugin contenant approximativement les mêmes fichiers que le module views_charts, sachant que cela va me créer un nouveau style pour mes views, alors que je veux juste surcharger un style existant ?

Merci !