Problème d'ajout d'onglet dans Module Builder

Bonjour,

Actuellement je développe un module pour créer des rapports de chantier, la structure du fichier a été généré par le Module Builder de Dolibarr.

Dans ma fiche objet je voudrai rajouter des onglets à ceux déjà présent, dans mon fichier descriptif du module : rapportschantier/core/modules/modRapportsChantier.class.php

J’ai bien déclaré des entrées (ici ce sont des entrées tests, afin de voir un nouvel onglet s’afficher) :

// Array to add new pages in new tabs
		
		// Example:
		 $this->tabs[] = array('data'=>'rapportchantier:+group:Membre:mylangfile@rapportschantier::/rapportschantier/rapportchantier_note.php?id=__ID__');
		 $this->tabs[] = array('data'=>'rapportchantier:+facture:facture:mylangfile@rapportschantier:1:/rapportschantier/rapportchantier_note.php?id=__ID__');

Dans le Module Builder dans l’onglet « Tabs » je vois bien que mes onglets sont détectés mais ils ne s’affichent pas sur ma fiche objet (voir capture d’écran)

(J’ai déjà pris connaissance du wiki et des sujets sur le forum, sans résultat concluant)
Auriez-vous une piste pour faire fonctionner les onglets ?

En remerciant les personnes qui prendront le temps de lire ce sujet !

bonjour @eNova
est-ce que vous désactivez / réactivez le module à chaque fois que vous modifiez le fichier modRapportsChantier ? car la conf des menu est lue à l’activation du module …

Bonjour,

Oui après chaque modification je désactive et réactive le menu mais sans résultats.

Le Module Builder m’a généré des fichiers que j’utilise dont card.php, les onglets devraient bien se rajouter sur la fiche objet à coté de « Événements » ?

Merci pour votre réponse

Bonjour,

Dans le module builder et le descripteur de module la partie « tabs » sert à ajouter des onglet dans les objets core de Dolibarr, pour ajouter des onglet donc votre objet il faut regarder dans la function xxxxPrepareHead() dans le fichier /lib/xxx.lib.php

Merci pour votre réponse,

J’ai ajouté dans la function rapportschantierAdminPrepareHead()


	$head[$h][0] = dol_buildpath("/rapportschantier/admin/about.php", 1);
	$head[$h][1] = $langs->trans("About");
	$head[$h][2] = 'about';
	$h++;

    $head        // Test ajout Onglet
    $head[$h]    
    $head[$h][0] = dol_buildpath("/rapportschantier/rapportchantier_note.php?id=__ID__", 1)
    $head[$h][1] = $langs->trans("TEST");
    $head[$h][2] = 'RapportChantier';
    $head = product_prepare_head($product, $user) ;
    
	// Show more tabs from modules
	// Entries must be declared in modules descriptor with line
	$this->tabs = array('data'=>'RapportChantier:+group:Membre:mylangfile@rapportschantier:1:/rapportschantier/rapportchantier_note.php?id=__ID__');
	//$this->tabs = array(
	//	'entity:-tabname:Title:@rapportschantier:/rapportschantier/mypage.php?id=__ID__'
	//); // to remove a tab

et dans mon fichier rapportchantier_card.php j’ai mis le dol_get_fiche_head au niveau de la vue

/*
 * View
 */

$form = new Form($db);
$formfile = new FormFile($db);
$formproject = new FormProjets($db);

$title = $langs->trans("RapportChantier");
$help_url = '';
llxHeader('', $title, $help_url);
	print dol_get_fiche_head($links, $active='rapportschantier', $title='okkkk', $notab=0, $picto='');
// Example : Adding jquery code
// print '<script type="text/javascript">
// jQuery(document).ready(function() {
// 	function init_myfunc()
// 	{
// 		jQuery("#myid").removeAttr(\'disabled\');
// 		jQuery("#myid").attr(\'disabled\',\'disabled\');
// 	}
// 	init_myfunc();
// 	jQuery("#mybutton").click(function() {
// 		init_myfunc();
// 	});
// });
// </script>';


// Part to create
if ($action == 'create') {
	if (empty($permissiontoadd)) {
		accessforbidden('NotEnoughPermissions', 0, 1);
	}

Donc déclaration dans xxx.lib.php,
Appel du dol_fiche_head dans mon card.php mais sans résultat…

La documentation Dolibarr étant très peu explicite, j’ai énormément de mal à repérer où doivent se placer les éléments dans le script et surtout dans quel fichier les placer.

Je viens de constater que les onglets ajoutés dans le lib s’ajoutent enfaite sur le chemin de page « custom/rapportschantier/admin/setup.php »

Et non sur le chemin custom/rapportschantier/card.php

[EDIT]
Après avoir placer le code au niveau du llxHeader, les onglets s’affichent mais d’une façon particulière

/*
 * View
 */

$form = new Form($db);
$formfile = new FormFile($db);
$formproject = new FormProjets($db);

$title = $langs->trans("RapportChantier");
$help_url = '';
llxHeader('', $title, $help_url);
$head = rapportschantierAdminPrepareHead();
print dol_get_fiche_head($head, 'settings', $langs->trans($page_name), -1, "rapportschantier@rapportschantier");

Voici l’affichage généré:

image

Savez-vous comment faire afficher les onglets de la fiche objet (générée par le ModuleBuilder → soit card.php) dans la continuité des onglets [Fiche; Contacts; Notes; Fichiers joints; Événements; MonOnglet1; MonOnglet2] ?

Merci pour vos aides.

! SOLUTION TROUVÉE !

Pour avoir un nouvel onglet comme :

Il ne faut pas allé dans le fichier VotreModule.lib.php
ce fichier gère les onglets dans les pages VotreModule/admin/xxx.php avec la fonction function rapportschantierAdminPrepareHead()

Mais il faut modifier le code dans le fichier VotreModule_VotreModule.lib.php qui s’occupe de la fonction « function VotreModulePrepareHead($object) »

L’onglet « TESTTT » a été généré avec le code suivant (à la suite des onglets existants)

	$head[$h][0] = dol_buildpath("/rapportschantier/rapportchantier_card.php", 1).'?id='.$object->id;
	$head[$h][1] = $langs->trans("TESTTT");
	$head[$h][2] = 'card';
	$h++;

Si jamais des développeurs voudraient plus d’informations sur comment j’ai « résolu mon problème » alors répondez sur ce sujet ou envoyez moi un message privé et je créerai un sujet « TUTORIEL : Module Builder - Ajout d’onglets sur fiche objet ».

1 « J'aime »