Enero 10, 2014
enzo
Drupal mediante el modulo Contextual del Core de Drupal facilita la administración de nuestros sitios, para los que no están familiarizados con los enlaces contextuales son menús administrativos que permiten realizar tareas a elementos dentro de cada pagina y estos menús se agrupas a elementos como nodos y bloques.
En la siguiente imagen podemos apreciar el menú contextual de un nodo.
En algunos casos puede ser necesario que por la lógica de negocio de nuestro sitio para ciertos usuarios ocultar algunos enlaces o simplemente ocultarlos teniendo en cuenta algún campo del nodo o bloque.
En el siguiente bloque de código veremos como ocultar el link de edit si el nodo tiene un valor especifico en uno de sus campos. Para esta tarea debemos implementar el hook hook_contextual_links_view_alter().
/**
* Implements hook_contextual_links_view_alter().
*/
function MIMODULO_contextual_links_view_alter(&$element, $item) {
if(isset($item['node-edit'])) {
$nid = split('node/', $item['node-edit']['tab_root_href']);
}
$node = node_load($nid[1]);
if (isset($node->subscriptions['enabled'])) {
unset($element['#links']['node-edit']);
}
}
}
Al implementación del hook recibe $element que es arreglo de datos que esta a punto de ser renderizado para generar el menú contextual y $item es un arreglo de los links originales.
En este ejemplo solo se hace un chequeo del campo subscriptions y si existe removemos de la lista de links el correspondiente al proceso de editar.
Al final para este casi especifico el menú dependiendo del nodo y su contenido ha sido cambiado.
Espero que haya sido de su agrado.