Developpement - Methode et bonne pratique

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 débute dans le développement et je souhaiterais connaitre la meilleure façon de travailler.

En effet quand on veut personnaliser son site on est vite confronté à l'obligation de modifier des parties de code. Il existe bien sur les hooks qui permettent de travailler proprement en créant de nouveaux modules mais quand ce n'est pas possible de faire un hook ca tourne vite au grabuge... hack directement dans le module avec problemes par la suite pour effectuer les mises a jour...

Alors voila... comment travailler le plus proprement possible, quels sont les outils que vous utilisez dans ce genre de situation.

Jusqu'a présent (sous Ubuntu), j'utilisais simplement geany comme editeur et firefox pour visualiser les modifs (avec le plugin firebug bien pratique).

Mais j'aimerais garder des traces de mes modifs et pouvoir créer des patchs de façon a ne pas devoir tout éditer à la main lors de la mise a jour d'un module ayant été modifié. J'utilise donc également bazaar (bazaar explorer pour etre précis), mais je n'ai pas trouvé comment créer des patchs simplement, sans ligne de commande.

J'ai testé Eclipse et Aptana mais ca me semble un peu usine a gaz pour gérer juste quelques modifs dans 2 ou 3 modules.

Et vous? quelle methode utilisez vous?

Merci

Peut importe l'éditeur, si vraiment tu as besoin d'un patch, tu crées ton petit fichier de path (cf google, comment créer un patch), et tu gardes ce fichier dans le repertoire du module, lors d'une mise a jour, tu l'applique a nouveau, avec un peu de chance, ca passe tout seul.

Mais sinon, c'est mal de patcher les modules. Tu ne devrais presque jamais avoir besoin de le faire. On a fait de gros gros projets sans jamais a avoir a toucher au code d'un module contrib.

Merci Haza, en effet j'ai cru comprendre que c'est mal de hacker ou patcher... Mais j'ai beau chercher je ne comprends pas comment créer un hook dans mon cas. Faire un hook_menu ou un hook_bloc j'ai compris, mais modifier une fonction je vois pas.

J'ai un test if qui me dérange dans le module votingapi. Je le fais sauter en le commentant "a la barbare" pour tester, j'obtiens bien fonctionnement escompté. J'ai donc essayé de créer un module pour modifier cette fonction, mais pas moyen... Voila pourquoi je suis tombé dans le patch et du coup sur les IDE...

Si tu as une piste je suis preneur. Merci

merci! ca marche! :)

Voila la fonction en question:
http://api.lullabot.com/votingapi_select_votes

Ce que je souhaite faire c'est empêcher le test. Le but est de permettre a tout utilisateur de voter autant de fois qu'il le souhaite car je controle les votes grace au module userpoints. Un point = droit de voter une fois.

J'ai rien trouvé dans l'api du module: http://drupal.org/node/68877

Je suppose que la partie precise du code est celle la ?

<?php
  $anon_window
= variable_get('votingapi_anonymous_window', 3600);
  if (!empty(
$criteria['vote_source']) && $anon_window > 0) {
   
$criteria['timestamp'] = time() - $anon_window;
  }
?>

Dans ce cas, pourquoi ne pas set la variable "votingapi_anonymous_window" à 0 ? (plein de maniere de le faire sans toucher au module). Le test ne sera jamais vrai, et c'est un peu comme si tu enlevais ton if ...

je me trompe ?

C'est bien cette partie du code.

$anon_window est réglable dans la configuration du module voting api. La variable est a 0 (vote immédiat, pas de vérification du temps entre deux votes).

Par contre $criteria['vote_source'] est l'ip du votant. C'est la que ca coince, ou plutot c'est la que je commence a entrevoir une solution. Ma modif ne doit pas concerner la premiere fonction dont je parlais, mais plutot votingapi_current_user_identifier:

<?php
function votingapi_current_user_identifier() {
  global
$user;
 
$criteria = array('uid' => $user->uid);
  if (!
$user->uid) {
   
$criteria['vote_source'] = ip_address();
  }
  return
$criteria;
}
?>

Donc comme tu l'indique je dois pouvoir set la variable $criteria['vote_source'] à 0. Mais comment faire ca? C'est possible en faisant un hook du formulaire de configuration de votingapi et en ajoutant une liste de choix? Si oui, je m'y colle. Est ce que c'est pour toi la meilleure façon de procéder. N'y a-t'il pas un moyen direct, sans changer le formulaire de config du module?

Je ne sais pas à quel niveau se situe la vérification, avant l'affichage du block, ou au submit, mais tu devrais pouvoir modifier le comportement.

Si c'est au moment de la vérification, j'en suis à peu près sûr, même si je n'ai jamais utilisé ce module.

Plus d'infos ici : http://www.hashbangcode.com/blog/overriding-poll-module-drupal-6-409.html

Ce n'est pas exactement le même module, mais je pense que la démarche est la même.

Merci dolu.

Bon j'ai essayé quelques trucs sans succès. C'est bien pratique tout ces hook mais pas simple a comprendre. Comme j'ai pas beaucoup de temps, je crois que je vais mettre ca de coté pour l'instant et faire du hack bien sale pour commencer. Quand j'aurais vendu mes premiers produits j'utiliserais les bénéfices pour payer un développeur (un vrai, pas comme moi) pour tout remettre au propre. En attendant pas de mises a jours... mais les modifs ne concernent que des modules secondaire que je peux désactiver en cas de probleme.

Merci pour votre aide en tout cas.