Astuce Drupal 7: Utiliser le menu "Local tasks" pour les tâches de la page

Une nouvelle fonctionnalité pratique dans Drupal 7 est "les tâches locales". Nous allons expliquer rapidement deux façons de les ajouter. Tout le monde devrait être
familiers avec les deux exemples se trouvant dans le module nœud.
Le premier exemple est l'ajout d'un type de contenu à travers le menu "admin/structure/types".

La première méthode pour créer une tâche locale est d'utiliser un hook_menu ()

<?php
/**
 * Implémente hook_menu().
 */
function node_menu() {

  
//...

 
$items['admin/structure/types'] = array(
    
'title' => 'Les types de contenu',
    
'description' => 'Gérer les types de contenu, y compris le statut par défaut, la promotion en première page, le paramétrage des commentaires, etc',
    
'page callback' => 'node_overview_types',
    
'access arguments' => array ('administrer les types de contenu'),
    
'file' => 'content_types.inc',
  );
  
$items['admin/structure/types/list'] = array(
    
'titre' => 'Liste',
    
'type' => MENU_DEFAULT_LOCAL_TASK,
    
'weight' => -10,
  );
  
$items['admin/structure/types/add'] = array(
    
'title' => 'Ajouter un type de contenu »,
    '
page callback' => 'drupal_get_form',
    '
page arguments' => array('node_type_form'),
    '
access arguments' => array('administrer les types de contenu'),
    '
type' => MENU_LOCAL_ACTION,
    '
file' => 'content_types.inc »,
  );

  
//...
}
</ 
Php>

Dans le menu "admin/structure/types/add" vous pouvez voir quun MENU_LOCAL_ACTION est ajoutéLorsque vous effectuez cette manipulationune tâche locale est créée sur la page.

Dans la page TPLvous trouverez ce qui rendra les tâches locales.

<
php>
      <?
php if ($action_links): ?>
        <ul class="action-links">
          <?php print render($action_links); ?>
        </ul>
      <?php endif; ?>

Dans le second exemple, on veut ajouter une tâche locale sans avoir à créer un élément de menu, parce que l'élément de menu qu'on veut utiliser existe déjà. Dans le module nœud, nous trouvons le "node/add" tâche locale sur "admin/content/node". Pour faire la même chose: cela se fait avec hook_menu_local_tasks_alter() Voir ici l'exemple du module nœud.

<?php
/ **
 * 
Implémente hook_menu_local_tasks_alter().
 * /
function 
node_menu_local_tasks_alter(&$data$router_item$root_path) {
 
// Ajouter un lien d'action pour 'node/add' sur la page 'admin/content'.
 
if ($root_path == 'admin/content') {
    
$item menu_get_item('node/add');
    if (
$item['access']) {
      
$data['actions']['output'][] = array(
        
'#theme' => 'menu_local_action',
        
'#link' => $item,
      );
    }
  }
}
?>

Notez comment l'accès est contrôlé en utilisant la propriété 'access' d'un élément. Ceci est important, ainsi les liens ne seront pas accessibles aux utilisateurs non autorisés.