Modifications du code par override/surcharge

Bonjour à tous,

Je suis un utilisateur de Dolibarr depuis maintenant 2 ans et je suis vraiment satisfait.
Etant dév PHP j’avoue que je peux le personnaliser à loisir et c’est super. Je rencontre des petits bugs que je corrige et je vais essayer de participer à l’amélioration dorénavant!
Le seul hic, c’est la mise à jour.

Ma question a peut-être déjà été posée mais je n’ai rien trouvé alors voilà.

J’ai fait beaucoup de petits ajustements pour moi (affichage de couleur différentes selon les status des devs et factures, tri des produits par label,etc…).
Ces modifs sont trop légères pour faire un module et je les fais donc dans les fichiers de base.
Existe-t-il une procédure pour surcharger les fichiers de base?

Merci d’avance de vos réponses!

Alexandre

Je me posais la même question (pour les mêmes raisons).
Est-ce qu’en créant ton propre dépôt et en fusionnant lors des mises à jour de versions, il n’y aurait que les conflits à résoudre ? (j’ai une très mauvaise connaissance de git)

Et bien je suis en train de faire l’expérience justement et tu t’en sors avec Git qui te montre les différences dans les fichiers mais bon, c’est un peu lourd en maintenance :smiley:

Hello
il y a 3 voix possible quand on souhaite aménager dolibarr
1 - porter son évolution directement dans le core en espérant être convainquant sur son utilité
2 - crée un module de toute pièce ou utiliser un module permettant d’arriver à ses fins (myfields et customtabs permettent de faire pas mal de chose en terme d’onglet et relooking d’onglet natif…)
3 - créer un hook ou un trigger quand c’est possible (si il y a un appel à l’un des deux)

Derniere Quand il n’est pas possible de faire autrement qu’une surcharge,
myfield permet aussi de « feinter » au niveau des menus/onglets en remplaçant les url natives, cela permet de rediriger vers sa propre page modifiées que l’on place dans le dossier custom.
Un de mes clients c’est ainsi fait une page intermédiaire à la création de produit où il redéfinie sa référence produit (impossible de faire autrement) : le menu « nouveau produit » le redirige vers une page intermédiairede création de la ref produit puis à la validation, il retourne à l’onglet natif
Il reste ensuite à l’adapter au besoin lors des montés de version mais au moins on n’écrase/perd pas son code…

Salut,

Merci beaucoup pour cette réponse très complète.
1 - ça se passe comment? par le git?
2 - je vais regarder myfileds
3 - j’ai étudié cette voie mais cela ne semblait pas correspondre. Après j’avoue que certains points techniques de Dolibarr m’échappe ^^
4 - Excellente suggestion que je garde à l’esprit

Dernière question, je ne veux pas abuser de ton temps sachant que le système est gratuit mais avant de me lancer dans le dev c’est possible que je crée un topic pour expliquer mon objectif et avoir quelques conseils?

Encore merci :wink:

1 - Oui, personnellement j’effectue directement les petites retouches (ce qui constitue presque la totalité de mes correctifs) par l’interface web, pour des choses plus conséquentes, il faut utiliser un truc plus local sur ton poste
2 - il y a une documentation et notre environnement de démo si besoin
3- le forum et le wiki sont là pour cela, même si rien ne vaux mieux qu’un peu de reverse ingenering (lire dans le code comment c’est fait)

C’est le but d’un forum il parait …

Bonjour,

Je cherche à savoir comment surcharger une fonction de classe dans htdocs/core/html.form.class.php notamment la fonction constructProductListOption. Je voudrais faire un module qui permette de configurer un peu plus cette fonction.

Puis-je remplacer le comportement natif par celle de la fonction que je souhaite développer ?

Personne ?

Hello,
J’ai eu une notif car c’est mon post au départ ^^
Au final je surcharge direct dans le code ou je fais des modules ou j’utilise les triggers et je ne fais pas les mises à jour…
Si c’est pour de l’utilisation perso ça va bien, si c’est pour de la revente et bien faut éviter.

Bonjour,

constructProductListOption est une methode prive.

Si vous voulez votre propre methode, vous doit override le objectline_create.tpl.php dans votre module/core/tpl. dans ce tpl vous faites votre html.form class avec votre constructProductListOption dans module/class. Pour active votre tpl vous set 1 pour le tpl dans votre module config.

$this->module_parts = array(
‹ triggers › => 1, // Set this to 1 if module has its own trigger directory (core/triggers)
‹ login › => 0, // Set this to 1 if module has its own login method file (core/login)
‹ substitutions › => 1, // Set this to 1 if module has its own substitution function file (core/substitutions)
‹ menus › => 0, // Set this to 1 if module has its own menus handler directory (core/menus)
‹ theme › => 0, // Set this to 1 if module has its own theme directory (theme)
‹ tpl › => 1, // Set this to 1 if module overwrite template dir (core/tpl)

Bonjour, je réponds tard car je n’ai pas coché la notification du sujet. Je n’arrive pas surcharger un tpl.Notamment card_presend.tpl.php que je mets dans mon modules dans nommodule/core/tpl/card_presend.tpl.php et même avec tpl à 1 dans la configuration du module, cela ne fonctionne pas.

Je précise que j’ai réactivé et désactivé :unhappy:

Bonjour,

C’est pas possible avec card_present, je vous conseille de demander une ‹ feature request › sur le dolibarr github.

Je vous advise, avant de override un core tpl de faire une recherche du tpl dans toute htdocs et voir que le $conf->modules_parts[‹ tpl ›] et utilise pour ce tpl.

Merci pour la réponse, du coup je pensais à remplacer htdocs\expedition\card.php est-ce possible d’overrider ce fichier ? Il y a un include dans ce fichier vers le tpl que je pourrais dans ce cas changer.

Avec le tabs module config vous pouvez remplacer le fiche par votre fiche

// Array to add new pages in new tabs

$this->tabs = array();

// Example:

// $this->tabs[] = array('data'=>'objecttype:+tabname1:Title1:[email protected]:$user->rights->xxx->read:/xxx/mynewtab1.php?id=__ID__'); // To add a new tab identified by code tabname1

// $this->tabs[] = array('data'=>'objecttype:+tabname2:SUBSTITUTION_Title2:[email protected]:$user->rights->othermodule->read:/xxx/mynewtab2.php?id=__ID__', // To add another new tab identified by code tabname2. Label will be result of calling all substitution functions on 'Title2' key.

// $this->tabs[] = array('data'=>'objecttype:-tabname:NU:conditiontoremove'); // To remove an existing tab identified by code tabname

[code]
//[/code

Merci je pense que je dois avoir un souci dans la syntaxe car cela ne fait rien du tout et ne remplace rien. Je dois avoir manqué quelque chose :

$this->tabs[] = array('data'=>'delivery:+test:Title1:[email protected]:$user->rights->blexport->read:/blexport/mynewtab1.php?id=__ID__');

Une idée ? Cela est pour remplacer expedition/card.php

Ok cela rajoute un onglet lors qu’on a cliqué sur ID de la liste. Ce que j’aurai aimé c’est remplacer carrément expedition/card.php (le listing en somme). Est-ce possible à votre avis ?

Merci d’avance

Bonjour tu as essayé de mettre un nouveau card.php dans custom/expedition ?

Oui je viens de tester et pour cela il faut changer le lien en custom/expedition/card.php sur les item de menu et cela peut fonctionner.
Ayant réfléchi je me suis dit que copier le fichier card.php ne serait pas forcément compatible avec les futures versions (versionning et effets de bord).
Je vais chercher une autre solution.

Merci en tous cas :wink: