Surcharger une seule fonction dist d'un formulaire

Bonjour,
Je souhaite surcharger la fonction formulaires_mot_de_passe_charger_dist qui est définie dans squelettes-dist/formulaires/mot_de_passe.php.

Si j’en crois Surcharger une fonction _dist - Programmer avec SPIP 4, je n’ai qu’à:

  • créer le fichier formulaires/mot_de_passe.php dans mon répertoire /squelettes
  • créer une fonction en formulaires_mot_de_passe_charger
  • et normalement c’est bon.

Ceci est partiellement vrai, car avec le debugger je vois bien que je passe dans ma fonction surchargée dans squelettes. En revanche, je m’attendais à ce que le traitement se fasse toujours dans formulaires_mot_de_passe_traiter_dist de squelettes-dist/formulaires, mais ce n’est absolument pas le cas.
En effet, la fonction charger_fonction appelée depuis traiter_formulaires_dynamiques ne trouve jamais la fonction et retourne un échec.

La seule manière d’obtenir un fonctionnement normal est de copier coller l’intégralité du fichier squelettes-dist/formulaires/mot_de_passe.php dans squelettes/formulaires/, puis de modifier ce que je souhaite.
Là, plus de problème de définition et tout fonctionne convenablement.

Cependant:

  • cela m’oblige à dupliquer un fichier entier pour une modif d’une ligne
  • cela ne semble pas correspondre à la doc

Est ce qu’une bonne âme pourrait éclairer ma lanterne :izakaya_lantern: svp?

Merci à tou·te·s

cpol0

Quoi qu’il en soit, je trouve qu’il vaut mieux éviter de surcharger quoi que ce soit. Tu ne peux pas t’en sortir avec le pipeline formulaire_charger ?

Dans l’affaire, il ne faut pas oublier que tous les fichiers sont surchargés avec le même chemin relatif aussi. Donc t’as fonction « sans dist », il ne faut surtout pas la mettre dans le même nom de fichier, sinon c’est ton fichier entier qui est chargé et juste lui, celui de SPIP n’existe plus. Donc aucun vérif et traitement.

Tu dois mettre ta fonction dans un fichier « options.php » par exemple.


RastaPopoulos

J’hérite d’un fonctionnement legacy :confused: et en fait c’est même pire que ça, je dois faire une modif dans la fonction retrouve_auteur. Donc là je m’en sortais en surchargeant la dist puis en redéfinissant retrouve_auteur avec le comportement que je veux. J’irais gratter, mais ça me semble mal parti pour un pipeline…

Ok merci, donc en fait quand il est écrit:

Ces déclarations peuvent être faites dans un plugin ou dans le dossier squelettes, dans un fichier d’options ou de fonctions

en fait c’est plutôt dans mes_options ou mes fonctions? J’essaie ça lundi merci!

Bonsoir,

Peut être expliquer ce que tu souhaites faire afin d’avoir une solution ou un plugins plus pérenne ?

Hello, après essai je peux effectivement surcharger les fonctions _dist dans mes_fonctions.php.

@pierretux , en fait j’essaie de réparer une machinerie infernale ou le précédent développeur a « cassé » spip, et maintenant je me retrouve avec des surcharges de ci de là, des petits forks « maison » qui font que des fonctions « spip de base » (comme le reset de mdp) ne fonctionne plus.

Donc là il s’agit de fixer des bugs, remettre de l’ordre et essayer de « recoller » à spip le plus possible mais il me restera forcément des scories de ci de là (je ne compte pas tout refaire).

J’ai donc 2 solutions à disposition:

  • surcharge totale du fichier (avec la necessité de rester synchro avec les mises à jour spip)
  • surcharge fonctions par fonctions dans mes_fonctions.php.

Je pense que nettoyer et refaire serait bien mais je me rends pas compte du nombre de surcharge.
Rester ce vieux code, va posé de plus en plus de soucis je pense.