Bonjours.

Je réalise actuellement un mini module permettant l'affichage d'un ou plusieurs menus contenant toute l'arborescence. Il existe déjà des modules de ce type, je sais, mais j'aimerais comprendre le fonctionnement de l'api...

Le module (menu_template) en page d'admin permet de cocher quels seront les menus à pouvoir bénéficier d'un nouveau block pour permettre donc l'affichage de l'arborescence complète.

Le hook_block permet d'assigner à mon thème les blocks nouvellement créé, et lance l'appel au hook_theme permettant l'affichage.

C'est là que je ne comprends pas ce que je dois faire. Je veux pouvoir suffixer les .tpl.php par la clé du menu correspondant.
En d'autre terme, pouvoir créer le modèle de nom de fichier comme ceci
-> menu-template-($id_du_menu).tpl.php
et que drupal cherche d'abord l'existance de ce fichier dans le dossier du thème, puis l'existance du fichier sans l'id du menu
-> menu-template.tpl.php
dans le dossier du thème aussi, et si il ne trouve rien appliquer une fonction par défaut.

Voilà le code du hook_block qui appel le hook_theme avec en premier argument un tableau les nom des modèles utilisable

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
case 'view' : {
 
            $block = array();
 
            $block['subject'] = $delta;//todo retrouver le nom
 
            $block['content'] = theme(array('menu_template__'. $delta, 'menu_template'), menu_tree_all_data($delta));
 
            return $block;
        }
je sais que je dois utiliser la propriété pattern dans mon hook_theme pour dire à drupal que les noms de fichier .tpl.php suivent un modèle, mais je n'y arrive pas. Quoi que je fasse seule le nom de fichier générique est pris en compte

ceci ne marche pas
- 1 seule enregistrement de hook_theme, mais avec un modèle de nom de fichier

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
function menu_template_theme($existing, $type, $theme, $path) {
 
    $themes = array();
 
    $themes['menu_template'] = array(
        'pattern' => 'menu_template__',//le modèle ne fonctionne pas ? 
        'arguments' => array('tree' => array()),
        'template' => 'menu_template',
    );
 
    return $themes;
}
et cela non plus
- autant d'enregistrement de hook_theme que de menu activé, avec en id, le même que celui appelé par la fonction theme dans le block

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
 
function menu_template_theme($existing, $type, $theme, $path) {
 
 
    $themes = array();
    $menus =  menu_get_menus(true);
 
    foreach ($menus as $menu_key=> $menu_name){
 
        if(variable_get(MenuTemplateConstants::ENABLE_MENU.'-'.$menu_key, FALSE)){
 
            $themes['menu_template__'.$menu_key] = array(
 
                'pattern' => 'menu_template__',
                'arguments' => array('tree' => 'rr'),
                'template' => 'menu_template',
                'original hook' => 'menu_template'
            );
        }
    }
    return $themes;
}
Ça semble être un chose simple à réalisé, mais je me mors les doigts depuis pas mal d'heures déjà

HELP! PLEASE!