Cherche developpeur de module francophone

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 continue mes développements de module Drupal mais je voudrais maîtriser et pas bidouiller. Donc je recherche des développeurs expérimentés qui m'expliqueront clairement comment cela marche. Et à mon tour, je serais à même d'aider les autres.

Voici mon genre de question :
- j'ai la version 4.6.3 et les liens du forum apparaissent q=forum/numéro, comme on fait pour que cela ne soit plus node/numéro
- j'essaye toujours de faire un module d'un objet qui apparait en plusieurs page, et j'aimerais utiliser les onglets mais les exemples que je trouve ne fonctionnent qu'en mode administration. Dans 'comment.module' voici ce que je vois

    // Subtabs:
    $items[] = array('path' => 'admin/comment/list/new', 'title' => t('new comments'),
      'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10);

Comment dois-je faire pour que cela apparaisse quand je regarde mon objet en visiteur.
L'essai que j'ai fait m'a donné des onglets mais pour tous les objets de drupal pas seulement de mon type.

Merci d'avance

Je voulais dire "développeur francophone" et non "module francophone".
Vous aurez bien compris que je ne comprends rien de la documentation anglaise que j'ai trouvé et j'ai besoin d'aide.
A l'occasion, si quelqu'un a commencé une traduction, ...

A bientôt
Franck

Salut.
[quote]- j'ai la version 4.6.3 et les liens du forum apparaissent q=forum/numéro, comme on fait pour que cela ne soit plus node/numéro[/quote]Ca c'est assez facile, tu vas ds [code]admin/settings[/code] et la tu actives les "Clean URLs" (je connais pas la traduc en francais...).

Par contre pour la 2eme question, je pige pas trop ce que tu veux faire... C'est quoi un objet ?
Cependant, vu que tu as l'air de vouloir creer un module avec des tabs, je te conseille de lire la doc sur l'api [url=http://drupaldocs.org/api/head/function/hook_menu]hook_menu[/url]. Je sais c'est en anglais mais a mon avis c'est qd meme le plus simple pour se renseigner. De maniere generale, la doc des [url=http://drupaldocs.org/api/head/]apis[/url] est indispensable pour tout bon developpeur, surtout avec les examples.

Bon courage

Bonjour

Merci pour cette première réponse

Premier point: je n'ai pas cette option et je vois http://localhost/drupal-4.6.3/?q=forum/9
et non pas quelque chose comme ?q=node/9

Deuxième point: je veux créer un module pour un nouveau type d'objet, ou de noeud si tu préfères.

Troisème point : bien sûr que j'ai lu cette merveilleuse doc sur l'api "hook-menu" et aussi sur les droits d'accès, mais comme cette fonction fait tout, elle ne fait pas ce que je veux ( j'ai donc rien compris ).

Alors, j'explique mon problème et j'espère être clair.
L'utilisateur crée un objet ( name, body )
et pour cet objet il doit remplir 3 listes d'informations ( A, B, et C).
J'aimerais qu'il puisse passer de la description de l'objet, à la liste A ou B ou C en cliquant sur des onglets.
J'aimerais aussi qu'il puisse modifier ( EDIT ) ce qu'il a mis en conservant les onglets.

Ce dont je rêve, c'est d'un exemple simple, d'un module qui gère un nouveau type de noeud avec des onglets en consultation et en modification et en administration.
Pour l'instant, je n'ai vu les onglets que pour l'administration.

Enfin, si jamais je ne suis pas clair, je mettrais à la demande générale un exemple de mon code.

Merci de votre attention, bonne soirée, à bientôt

Premier point: je n'ai pas cette option et je vois http://localhost/drupal-4.6.3/?q=forum/9
et non pas quelque chose comme ?q=node/9

Quel est le probleme ici ?
Au debut vous me parliez d'un probleme d'URLs simplifiées (je viens finalement de trouver le lien), ce que je vous ai repondu ou modifier ce parametre qui par la suite fait disparaitre le "?q=". La, quel est le probleme ?
Qd vous naviguez ds la liste des forums, il est normal qu'apparaisse "forum/9" et non pas "node/9" car la liste des forum s'affiche a travers le module forum, d'ou l'url. Ensuite chaque thred du forum est un node donc s'affichera avec "node/node_id", donc tout va bien nan ?

Deuxième point: je veux créer un module pour un nouveau type d'objet, ou de noeud si tu préfères.

Desole, etant plutot connaisseur de la terminologie anglaise, je suis reste avec "node" en tete.
PS : On se tutoie ou vouvoie ? :D

Concernant la question 3.
Ok je cerne un peu mieux le probleme. J'ai cependant un peu peur que cela soit plutot difficile (impossible n'est pas francais ;) ) a faire avec la version actuelle de Drupal...
En effet, tout le process d'edition d'un node pour le moment se fait a travers une seule page. De plus, je ne vois pas trop comment en cliquant sur un autre onglet on pourrait faire passer l'information ou la sauvegarder... Cela me rappelle un blog du developpeur de IPB qui fait reference a ce genre de comportement, permissions IPB par contre ca utilise un max Ajax et surtout je vois pas trop comment ca se ferait avec Drupal :(

Par contre as-tu vraiment besoin de plusieurs onglets pour l'edition ?
Ne peux tu pas simplement creer un nouveau type de node avec flexinode et ensuite t'arranger pour mettre un peu de mise en forme et de CSS pour creer par exemple des onglets en Javascript du genre : tab en JS qui utilise une librairie type Tabtastic, voir le commentaire sur Drupal.
ou bien ce site de location d'apparts , ce dernier a mon avis fait usage de modules qui rajoutent eux meme les onglets, par contre je suis persuade qu'au niveau de l'edition c'est sur une meme page...

Voila, ce que je pense, j'espere que cela puisse t'aider a chercher un peu plus...

Alors on va se tutoyer.

Reprends mon premier message où je disais que je voulais savoir comment il se fait que dans les forums on voit /forum et pas /node car je voudrais bien faire la même chose, cela rendrait ma navigation plus simple. Donc quel le bout de code qui spécifie ce comportement?

Il est possible de faire des onglets pour la saisie et la consultation puisque le module "profile" le fait trés bien mais comme c'est totalement dynamique et spécifique au "node" user, je ne comprends pas comment cela marche.

D'un point de vue sémantique, il faut quand même utiliser d'autres termes, il n'est pas évident que gérer des nodes soit l'équivalent de gérer des objets, et les objets que tu peux gérer dans une page ne sont peut-être pas des nodes drupal. Dans mon problème, imagine une matrice ( un node ) pour lequel tu veux spécificier les valeurs des axes ( x, y, z ce ne sont pas des nodes mais bien des objets à gérer de façon spécifique ).

Merci encore pour ton implication.

Reprends mon premier message où je disais que je voulais savoir comment il se fait que dans les forums on voit /forum et pas /node car je voudrais bien faire la même chose, cela rendrait ma navigation plus simple. Donc quel le bout de code qui spécifie ce comportement?

J'ai pige ;) (je comprends vite mais faut qu'on m'explique longtps :)
Donc en fait ca vient bien du hook_menu comme je te le disais, voici le bout de code dont tu me parlais :

<?php
 $items
[] = array('path' => 'forum', 'title' => t('forums'),
     
'callback' => 'forum_page',
     
'access' => user_access('access content'),
     
'type' => MENU_SUGGESTED_ITEM);
?>

Ici on voit bien que le path c'est "forum" et qu'il est pris en compte par la fonction "forum_page" ce qui est la methode logique d'implementation de "hook_page". J'espere que ca repond a ta question.

Passons aux choses serieuses...

Il est possible de faire des onglets pour la saisie et la consultation puisque le module "profile" le fait trés bien mais comme c'est totalement dynamique et spécifique au "node" user, je ne comprends pas comment cela marche.

Celui la (le module user) c'est du costaud... Et c'est la qu'on voit vraiment la puissance de Drupal.
Alors on va le decortiquer un peu es esperant que ca t'aide a comprendre le fonctionnement et eventuellement a le reproduire... Personnelement je n'ai toujours pas ecrit de module pour Drupal donc je n'ai pas encore cette pratique, par contre je commence a un peu mieux comprendre le code...
Allons-y...
Premier pas, identifier le path :
Tout commence par le hook_menu de user.module :

<?php
 
if (arg(0) == 'user' && is_numeric(arg(1))) {
//...
     
$items[] = array('path' => 'user/'. arg(1) .'/edit', 'title' => t('edit'),
       
'callback' => 'user_edit', 'access' => $admin_access || $user->uid == arg(1),
       
'type' => MENU_LOCAL_TASK);
//...

     
if (arg(2) == 'edit') {
        if ((
$categories = _user_categories()) && (count($categories) > 1)) {
          foreach (
$categories as $key => $category) {
           
$items[] = array(
             
'path' => 'user/'. arg(1) .'/edit/'. $category['name'],
             
'title' => $category['title'],
             
'type' => $category['name'] == 'account' ? MENU_DEFAULT_LOCAL_TASK : MENU_LOCAL_TASK,
             
'weight' => $category['weight'],
             
'access' => ($admin_access || $user->uid == arg(1)));
          }
        }
      }
    }
?>

Alors ici on a tout d'abord une interception du path qui dit que s'il est du genre user/1/edit, alors il faut utiliser la fonction user_edit, jusque la tout va bien.
Apres on rajoute une couche qui permet de creer les categories sous forme de tabs (MENU_LOCAL_TASK), tout en controlant l'acces "access".
Juste au dessus, tu remarqueras la fonction _user_categories :

<?php
 
function _user_categories() {
 
$categories = array();

  foreach (
module_list() as $module) {
    if (
$dat = module_invoke($module, 'user', 'categories', NULL, NULL, '')) {
     
$categories = array_merge($dat, $categories);
    }
  }

 
usort($categories, '_user_sort');

  return
$categories;
}
?>

Cette fonction montre la mise en action des hooks ds Drupal, a travers la fonction module_invoke celle ci permet d'appeler un hook situe ds un autre module. En l'occurence de recuperer la liste des categories qu'utilise le module profile.
Ce que l'on voit ds le code suivant :

<?php
 
function profile_user($type, &$edit, &$user, $category = NULL) {
  switch (
$type) {
   
//...
   
case 'categories':
      return
profile_categories();
  }
}
?>

Du coup le module user va interagir avec le profile pour recuperer de l'information extra.
Bon la on est alle un peu loin, car je ne pense pas que ton module va creer ou utiliser les hooks, cependant, au minimum, a traver la fonction user_menu tu as pu voir comment mettre en oeuvre les tabs editables (et autant pour moi, je ne me souvenait pas de cette maniere de faire ds mes premiers post...)
Il faut ensuite finir le chemin pour voir ce qu'il se passe reelement lors de l'edition, donc on se dirige vers la fonction user_edit et la on voit la tete d'un formulaire d'edition...
Bon celle la est un peu complexe...

<?php
 
if ($_POST['op'] == t('Submit')) {
   
user_module_invoke('validate', $edit, $account, $category);
   
//...
 
}
?>

En gros la on valide l'entree de l'utilisateur. Voir par exemple les validations de donnees faites ds profile_validate_profile qui est appelle a travers le hook ci dessus.
Je passe le reste pour arriver a

<?php
   $output 
= _user_forms($edit, $account, $category);
 
$output .= form_submit(t('Submit'));
  if (
user_access('administer users')) {
   
$output .= form_submit(t('Delete'));
  }
 
$output = form($output, 'post', 0, array('enctype' => 'multipart/form-dat'));

 
drupal_set_title($account->name);
  return
$output;
?>

La on affiche le formulaire que l'utilisateur va capturer.

Voila, c'est un peu super long comme explication, mais j'espere que ca te permettra de te pencher un peu plus sur le code et surtout apres d'experimenter... Cette explication a un peu devie avec l'histoire des hooks, mais j'espere que ca te donnera envie d'en savoir plus.

A bientot.

Ps : n'hesites pas a me contacter pour d'autres informations, sinon a bientot sur le forum.

PPS : pour ceux qui se sont deja battus avec le "Terminated request because of suspicious input data.", j'ai trouve pourquoi mon post ne fonctionnait pas :D
En fait c'est qu'a un moment, j'ai un truc du genre

<?php
$dat
= 'qqch';
?>

, sauf qu'on remplace '$dat' par '$data', or la variable $data est utilisee ds drupal pour plein de choses (l'editions de posts entre autres) et du coup si mon utilisateur a le droit de poster du php (attention pas du code mis en couleur, du vrai php), il risque de tout casser en changeant la valeur de data...
PPS : j'ai gagne un truc pour le plus long post du site ? :D
Bon j'arrete la...

Ebloui !
je suis par ton explication. Bon je ne sais pas si je vais y arriver car j'ai pas tout compris mais tu as éclairé beaucoup de chose. Je te tiens au courant dès que j'achève les premiers essais.
Merci beaucoup