Question

Je veux ajouter des onglets dans la page "node /% / edit" de mon module appelé "cssswitch". Lorsque je clique sur « Reconstruire menus », les deux nouveaux onglets sont affichés, mais ils sont affichés pour tous les nœuds lors de leur édition, non seulement pour le noeud « cssswitch ». Je veux que ces nouveaux onglets à afficher uniquement lors de l'édition noeud de type « cssswitch ».

L'autre problème est quand j'effacer toutes les données, les onglets dissapear complètement de toutes les pages d'édition. Voici le code que j'ai écrit.

    function cssswitch_menu_alter(&$items) {

        $node = menu_get_object();
        //print_r($node);
        //echo $node->type; //exit();
        if ($node->type == 'cssswitch') {

            $items['node/%/edit/schedulenew'] = array(
                'title' => 'Schedule1',
                'access callback'=>'user_access',
                'access arguments'=>array('view cssswitch'),
                'page callback' => 'cssswitch_schedule',
                'page arguments' => array(1),
                'type' => MENU_LOCAL_TASK,
                'weight'=>4,
            );

            $items['node/%/edit/schedulenew2'] = array(
                'title' => 'Schedule2',
                'access callback'=>'user_access',
                'access arguments'=>array('view cssswitch'),
                'page callback' => 'cssswitch_test2',
                'page arguments' => array(1),
                'type' => MENU_LOCAL_TASK,
                'weight'=>3,
            );  


        }

    }

function cssswitch_test(){
    return 'test';
}

function cssswitch_test2(){
    return 'test2';
}

Merci pour toute aide.

Était-ce utile?

La solution

hook_menu_alter () est appelée uniquement au cours du processus de construction de menu, de sorte que vous ne pouvez pas faire des contrôles de type noeud dynamique dans cette fonction.

Cependant, pour obtenir ce que vous voulez, vous pouvez le faire avec un rappel d'accès personnalisé comme suit:

       // Note, I replaced the '%' in your original code with '%node'. See hook_menu() for details on this.
       $items['node/%node/edit/schedulenew2'] = array(
            ...
            'access callback'=>'cssswitch_schedulenew_access',
            // This passes in the $node object as the argument.
            'access arguments'=>array(1),
            ...
        );  

Ensuite, dans votre nouveau rappel d'accès personnalisé:

function cssswitch_schedulenew_access($node) {
  // Check that node is the proper type, and that the user has the proper permission.
  return $node->type == 'cssswitch' && user_access('view cssswitch');
}

Pour les autres types de nœuds, cette fonction retourne un accès faux, niant ainsi, et supprimant ainsi l'onglet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top