Drupal 7 tip: Gebruik menu local tasks voor op page tasks

Posted by: 
Dominique De Cooman

Een handige nieuwe feature in drupal 7 zijn de local tasks. We zullen snel twee manieren uitleggen om ze toe te voegen. Iedereen zou bekend moeten zijn met deze twee voorbeelden die in de node module gevonden kunnen worden.
Het eerste voorbeeld is de add content type on "admin/structures/types".

Bij de eerste methode om een local task te creëren kunnen we gebruik maken van een hook_menu()

<?php
/**
 * Implements hook_menu().
 */
function node_menu() {

  
//...

 
$items['admin/structure/types'] = array(
    
'title' => 'Content types',
    
'description' => 'Manage content types, including default status, front page promotion, comment settings, etc.',
    
'page callback' => 'node_overview_types',
    
'access arguments' => array('administer content types'),
    
'file' => 'content_types.inc',
  );
  
$items['admin/structure/types/list'] = array(
    
'title' => 'List',
    
'type' => MENU_DEFAULT_LOCAL_TASK,
    
'weight' => -10,
  );
  
$items['admin/structure/types/add'] = array(
    
'title' => 'Add content type',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('node_type_form'),
    
'access arguments' => array('administer content types'),
    
'type' => MENU_LOCAL_ACTION,
    
'file' => 'content_types.inc',
  );

  
//...
}
?>

In het "admin/structure/types/add" item kunt u zien dat een MENU_LOCAL_ACTION is toegevoegd. Wanneer u dit doet wordt een local task gecreëerd op de pagina.

In de pagina tpl vindt u welke de local tasks verwijderd.


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

In het tweede voorbeeld willen we, omdat het menu item dat we willen gebruiken reeds bestaat, een local task toevoegen zonder een menu item te creëren. In de node module vinden we de "node/add" local task in "admin/content/node". Om iets vergelijkbaars te doen: dit kan gedaan worden met hook_menu_local_tasks_alter() Bekijk hier het voorbeeld uit de node module.

<?php
/**
 * Implements hook_menu_local_tasks_alter().
 */
function node_menu_local_tasks_alter(&$data$router_item$root_path) {
  
// Add action link to 'node/add' on 'admin/content' page.
  
if ($root_path == 'admin/content') {
    
$item menu_get_item('node/add');
    if (
$item['access']) {
      
$data['actions']['output'][] = array(
        
'#theme' => 'menu_local_action',
        
'#link' => $item,
      );
    }
  }
}
?>

Merk op hoe de toegang wordt gecontroleerd door het gebruik van de items access property. Dit is belangrijk om te voorkomen dat links zichtbaar zijn voor onbevoegde gebruikers.

Reactie toevoegen