¿Cómo ocultar las pestañas Editar | Ver?


¿Puedo ocultar el

Editar / Ver

Pestañas en la parte superior de cada nodo ?

He buscado esta opción en la configuración del tema (tema global y estándar, pero no pude encontrarla).

Todavía quiero que mi cliente pueda editar / administrar contenido, por lo que no puedo simplemente eliminar el permiso para ello.

Gracias

Author: aneuryzm, 2010-08-20

10 answers

Esto realmente es una cosa de presentación, no una cosa de funcionalidad, por lo que debe hacerse a nivel de tema.

El problema con sobreescribir theme_menu_local_tasks() es que sobreescribe/lleva un hacha a toda la pantalla de tareas locales, cuando realmente solo desea entrar allí con un bisturí para eliminar dos tareas locales específicas. Por lo tanto, necesitas ser un poco más específico.

theme_menu_local_tasks() obtiene las tareas locales de la página actual y las pasa a menu_local_tasks(). Aquí, dos funciones temáticas se utilizan:

  1. theme_menu_item_link(), que obtiene el marcado de enlace para la tarea
  2. theme_menu_local_task(), que obtiene el elemento <li> para la tarea.

Por lo tanto, puede deshacerse de la Vista y Editar tareas locales de una manera realmente robusta reemplazando theme_menu_item_link() y theme_menu_local_task() para incluir su verificación de ellas:

function mytheme_menu_item_link($link) {
  // Local tasks for view and edit nodes shouldn't be displayed.
  if ($link['type'] & MENU_LOCAL_TASK && ($link['path'] === 'node/%/edit' || $link['path'] === 'node/%/view')) {
    return '';
  }
  else {
    if (empty($link['localized_options'])) {
      $link['localized_options'] = array();
    }

    return l($link['title'], $link['href'], $link['localized_options']);
  }
}

function mytheme_menu_local_task($link, $active = FALSE) {
  // Don't return a <li> element if $link is empty
  if ($link === '') {
    return '';
  }
  else {
    return '<li '. ($active ? 'class="active" ' : '') .'>'. $link ."</li>\n";  
  }
}

De esta manera, está confiando en la ruta del enrutador de menú, no modificando el elemento del enrutador de menú, y logrando el resultado que desea con un mínimo cambios en la funcionalidad principal o la tematización.

 16
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-20 18:56:36

Aquí hay una solución muy fácil para usted. (Drupal 7)

  • Abra su página .tpl.php en su plantilla actual y busque la variable tabs tabs.

  • Elimine el código de renderizado si desea ocultarlo por completo.

  • Si desea mostrarlo solo a los administradores, use este código

    <?php if ($tabs and $is_admin): ?>
    <div class="tabs">
      <?php print render($tabs); ?>
    </div>
    

    El código anterior comprueba si el usuario es administrador. Si lo es, renderizará las pestañas. Si no, no los hará.

 18
Author: ANDiTKO,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-16 12:14:11

En el lado del módulo, puede hacer algo que desacople la entrada del menú de Edición de las tareas locales para el nodo:

function custom_menu_alter(&$items) {
  $items['node/%node/edit']['type'] = MENU_CALLBACK;
}

La ruta de edición sigue ahí, pero ahora no está asociada con la pestaña Vista. Esto incluye la página editar en sí tab no Ver pestaña allí.

 9
Author: Grayside,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-20 16:16:05

Hay un módulo para eso: tab tamer permite ocultar o deshabilitar pestañas y renombrarlas también.

 9
Author: MotoTribe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-18 15:14:15

Utilizo lo siguiente en la plantilla.php por tema (que es quizás un poco hackeado, siento que debería estar considerando desactivar tabs tabs en su lugar):

function THEME_NAME_menu_local_tasks() {
  return '';
}

O podrías ommit:

if ($tabs) echo $tabs;

De tu página.tpl.php...

 1
Author: CitrusTree,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-20 13:59:39

Ver y Editar son características funcionales. Tienen una razón para estar allí.

La mejor manera de "eliminarlos", es "eliminar" esa funcionalidad en conjunto. Después de todo: ¿por qué eliminar la interfaz de una pieza de funcionalidad, pero no la funcionalidad en sí? Además, simplemente no imprimir las pestañas, no elimina los extremos de url . En otras palabras: si no imprime la pestaña editar, las personas aún pueden acceder a la página editar.

De nuevo: lo mejor es elimina esa funcionalidad: El hecho de que no quieras la pestaña edit, suena como si no quisieras la funcionalidad edit para ciertos usuarios. Si es así, entonces simplemente elimine ese permiso para ese rol. Eso es todo. Las pestañas se habrán ido.

Si, sin embargo, simplemente deseas mostrar estas pestañas de manera diferente, Drupal es tu amigo. Como habrás notado, se llaman tareas locales y no pestañas . Esto se debe a que el tema decide cómo renderizar ellos: El tema es lo que decide mostrarlos como pestañas.

Simplemente anule el theme_menu_local_tasks() para crear su propio HTML para las "tareas locales". Y en su página-tpl, simplemente mueva la variable $tabs a un lugar, donde las desee.

Pero de nuevo: No intente cambiar el comportamiento de la aplicación, eliminando los elementos de interfaz. Que no es lo correcto: debe cambiar el comportamiento, con el fin de cambiar el comportamiento :)

 1
Author: berkes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-20 14:17:09

Para todas las personas que tropiezan con esta pregunta mientras buscan una solución D7: Como se indica en https://drupal.stackexchange.com/a/77964/15055 {[4] }es hook_menu_local_tasks_alter()

/**
 * Implements hook_menu_local_tasks_alter() to unset unwanted tabs
 */
function MYMODULE_menu_local_tasks_alter(&$data) {
  foreach ($data['tabs'][0]['output'] as $key => $value) {
    if ($value['#link']['path'] == 'node/%/view') {
      unset($data['tabs'][0]['output'][$key]);
    }
  }
}
 1
Author: leymannx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 12:46:54

Esta no es la respuesta a la pregunta de lo que el autor hizo. Pero de alguna manera podría ser útil para otros usuarios que enfrentan el problema similar conmigo. Por favor, hágamelo saber si esto no es adecuado para poner aquí.

Obtengo la respuesta de @grayside y modifiqué un poco para ocultar la pestaña ver | editar del nodo en función del tipo de contenido que quiero.

    function MYMODULE_menu_alter(&$items) { 
      $items['node/%node/view']['access callback'] = 'MYMODULE_disable_node_view';
      $items['node/%node/view']['access arguments'] = array(1); 
    } 

    function MYMODULE_disable_node_view($node){
      if($node->type == 'product'){
        return false;
      }
    }

Product es el nombre de la máquina de mi tipo de contenido, no quiero que nadie quiera acceder a él, incluido el usuario root.

 0
Author: cww,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-28 16:25:01

La solución más sencilla para ocultar las pestañas es agregar esta clase en su tema css

.tabs{ display:none;}
 0
Author: Fahad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-14 20:30:43

Gracias por la última respuesta. Pero tenga en cuenta este detalle: si lo intenta tal cual no puede funcionar: los literales deben redondearse con "o", no ambos en conjunto. Así que debería ser:

/**
 * Implements hook_menu_local_tasks_alter() to unset unwanted tabs
 */
function MYMODULE_menu_local_tasks_alter(&$data) {
  foreach ($data['tabs'][0]['output'] as $key => $value) {
    if ($value['#link']['path'] == "node/%/view") {
      unset($data['tabs'][0]['output'][$key]);
    }
  }
}

Una vez cuidado, funciona:)

 0
Author: oscaral,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-03 10:08:17