patterns - view module drupal
Cómo ocultar Editar | Ver pestañas? (10)
¿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 encontrarlo).
Todavía quiero que mi cliente pueda editar / administrar el contenido, por lo que no puedo quitarle el permiso.
Gracias
En el lado del módulo, podría hacer algo que desacople la entrada del menú Editar de las tareas locales para el nodo:
function custom_menu_alter(&$items) {
$items[''node/%node/edit''][''type''] = MENU_CALLBACK;
}
La ruta de edición todavía está allí, pero ahora no está asociada a la pestaña Vista. Esto incluye la página de edición en sí misma, no hay pestaña Ver allí.
Esta no es la respuesta a la pregunta de lo que preguntó el autor. Pero de alguna manera podría ser útil para otros usuarios que enfrentan el mismo problema conmigo. Por favor, hágamelo saber si esto no es adecuado para poner aquí.
Obtuve la respuesta de @grayside y modifiqué un poco para ocultar la vista | editar pestaña desde nodo según el 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;
}
}
producto es el nombre de la máquina de mi tipo de contenido, no quiero que nadie tenga acceso, incluido el usuario raíz.
Esto realmente es algo de presentación, no una cosa de funcionalidad, por lo que debe hacerse a nivel de tema.
El problema con la anulación de theme_menu_local_tasks()
es que anula / toma un hacha de guerra en toda la pantalla de tareas locales, cuando realmente solo desea ingresar allí con un bisturí para eliminar dos tareas locales específicas. Entonces, necesitas 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í, se usan dos funciones de tema:
-
theme_menu_item_link()
, que obtiene el marcado del enlace para la tarea -
theme_menu_local_task()
, que obtiene el elemento<li>
para la tarea.
Por lo tanto, puede deshacerse de las tareas Ver y Editar locales de una manera realmente robusta anulando theme_menu_item_link()
y theme_menu_local_task()
para incluir su verificación para 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 forma, confía en la ruta del enrutador de menú, no modifica el elemento del enrutador de menú y logra el resultado que desea con cambios mínimos en la funcionalidad principal o la creación de temas.
Gracias por la última respuesta. Pero tenga en cuenta este detalle: si lo intenta como está, no puede funcionar: los literales deben redondearse con "o", no ambos en total. Por lo tanto, 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 que me encargué, funciona :)
La solución más simple para ocultar las pestañas es agregar esta clase en el tema css
.tabs{ display:none;}
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 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]);
}
}
}
Uso lo siguiente en template.php por tema (que quizás sea un poco raro, creo que debería considerar deshacer las pestañas $ en su lugar):
function THEME_NAME_menu_local_tasks() {
return '''';
}
O puedes omitir:
if ($tabs) echo $tabs;
de tu página.tpl.php ...
Ver y editar son funciones funcionales. Ellos tienen una razón para estar allí.
La mejor manera de "eliminarlos" es "eliminar" esa funcionalidad por completo. Después de todo: ¿por qué eliminar la interfaz de una pieza de funcionalidad, pero no la funcionalidad en sí? Además, al no imprimir las pestañas, no elimina los puntos finales de la url . En otras palabras: si no imprime la pestaña de edición, las personas aún pueden acceder a la página de edición.
De nuevo: lo mejor es eliminar esa funcionalidad: el hecho de que no desee la pestaña de edición suena como si no quisiera la funcionalidad de edición para ciertos usuarios. Si es así, simplemente elimine ese permiso para ese rol. Eso es todo. Las pestañas se habrán ido.
Sin embargo, si simplemente deseas mostrar estas pestañas de forma diferente , Drupal es tus amigos. Como habrás notado, se llaman tareas locales y no pestañas . Eso es porque el tema decide cómo representarlos: 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 page-tpl, simplemente mueva la variable $tabs
tab a un lugar, donde lo desee.
Pero nuevamente: no intente cambiar el comportamiento de la aplicación, eliminando los elementos de la interfaz. Eso no es lo correcto: debes cambiar el comportamiento para cambiar el comportamiento :)
aquí hay una solución muy fácil para ti. (Drupal 7)
Abra su página.tpl.php en su plantilla actual y busque la variable $ tab .
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 renderizará.
hay un módulo para eso: tab tamer permite ocultar o desactivar pestañas y cambiarles el nombre también.