protected function InitialiserReferentiels()
 {
     $mListeMenus = new MListeMenus();
     $mListeMenus->AjouterColSelection(COL_ID);
     $mListeMenus->AjouterColSelection(COL_LIBELLE);
     $mListeMenus->AjouterColOrdre(COL_LIBELLE);
     $this->AjouterReferentiel(array(COL_MENU, COL_ID), $mListeMenus, array(COL_ID, array(COL_LIBELLE, COL_LIBELLE)));
 }
<?php

require_once 'cst.php';
require_once PATH_METIER . 'mListeMenus.php';
require_once PATH_COMPOSANTS . 'cListeMenusAdmin.php';
if (GDroit::ADroitPopErreur(DROIT_ADMIN) === true) {
    $prefixIdClass = PIC_ADM;
    $cListe = new CListeMenusAdmin($prefixIdClass, 'MenusAdmin', $nomContexte, 20, -1, true, 'MenusAdmin');
    $mListe = new MListeMenus();
    $mListe->AjouterColSelection(COL_ID);
    $mListe->AjouterColSelection(COL_LIBELLE);
    $mListe->AjouterColSelection(COL_ORDRE);
    $mListe->AjouterColSelection(COL_MENU);
    $mListe->AjouterColSelection(COL_DEPENDFONCTIONNALITE);
    $numJointure = $mListe->AjouterJointure(COL_MENU, COL_ID, 0, SQL_LEFT_JOIN);
    $numJointure = $mListe->AjouterJointure(COL_LIBELLE, COL_ID, $numJointure, SQL_LEFT_JOIN);
    $mListe->AjouterColSelectionPourJointure($numJointure, COL_LIBELLE, COL_MENU . COL_LIBELLE);
    $mListe->AjouterFiltreEgalPourJointure($numJointure, COL_LANGUE, GSession::Langue(COL_ID));
    $mListe->AjouterColOrdre(COL_ORDRE);
    $cListe->InjecterListeObjetsMetiers($mListe);
    if ($dejaCharge === false) {
        GContexte::AjouterContenu(CADRE_CONTENU_CONTENU, $cListe);
    } else {
        GContexte::AjouterListe($cListe);
    }
}
$cListe = new CListeMenusPliants($prefixIdClass, 'Menus', $nomContexte, -1);
// Chargement de la liste de tous les menus.
$mListe = new MListeMenus();
$mListe->AjouterColSelection(COL_ID);
$mListe->AjouterColSelection(COL_LIBELLE);
$mListe->AjouterColSelection(COL_ORDRE);
$mListe->AjouterColSelection(COL_MENU);
$mListe->AjouterColSelection(COL_DEPENDFONCTIONNALITE);
$numJointure = $mListe->AjouterJointure(COL_MENU, COL_ID, 0, SQL_LEFT_JOIN);
$numJointure = $mListe->AjouterJointure(COL_LIBELLE, COL_ID, $numJointure, SQL_LEFT_JOIN);
$mListe->AjouterColSelectionPourJointure($numJointure, COL_LIBELLE, COL_MENU . COL_LIBELLE);
$mListe->AjouterFiltreEgalPourJointure($numJointure, COL_LANGUE, GSession::Langue(COL_ID));
$mListe->AjouterColOrdre(COL_ORDRE);
$mListe->Charger();
// Liste des menus principaux.
$mListeMenusPrincipaux = new MListeMenus();
$menus = $mListe->GetListe();
foreach ($menus as $menu) {
    if ($menu->Menu()->Id() === NULL) {
        $mListeMenusPrincipaux->AjouterElement($menu);
    }
}
$menusPrincipaux = $mListeMenusPrincipaux->GetListe();
foreach ($menusPrincipaux as $menuPrincipal) {
    $nbSousMenus = 0;
    $cListeSousMenus = new CListeMenus($prefixIdClass, 'Menus_' . $menuPrincipal->Id(), $nomContexte, -1);
    $cListeSousMenus->SetListeParente($cListe, $menuPrincipal->Id());
    $mListeSousMenus = new MListeMenus();
    // On regarde les sous-menus qui sont rattachés aux menus principaux.
    foreach ($menus as $menu) {
        if ($menuPrincipal->Id() === $menu->Menu()->Id()) {