How to hide Edit | View tabs?

2019-03-09 09:21发布

Can I hide the

Edit | View

tabs on top of each node ?

I've searched for this option in theme settings (both global and standard theme but I couldn't find it).

I still want to be able my customer to edit / administer content, so I cannot just remove the permission for it.

thanks

10条回答
一纸荒年 Trace。
2楼-- · 2019-03-09 09:33

there is a module for that: tab tamer allows to hide or disable tabs and rename them as well.

查看更多
闹够了就滚
3楼-- · 2019-03-09 09:36

here is a very easy solution for you. (Drupal 7)

  • Open your page.tpl.php in your current template and search for the $tabs variable.

  • Remove the render code if you want to hide it completely.

  • If you want to display it only to administrators use this code

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

    The above code checks if the user is administrator. If it is it will render the tabs. If not it wont render them.

查看更多
beautiful°
4楼-- · 2019-03-09 09:36

I use the following in template.php by theme (which is perhaps a little hacky, I feel I should be considering unsetting $tabs instead):

function THEME_NAME_menu_local_tasks() {
  return '';
}

Or you could ommit:

if ($tabs) echo $tabs;

from your page.tpl.php...

查看更多
家丑人穷心不美
5楼-- · 2019-03-09 09:37

This really is a presentational thing, not a functionality thing, so it should be done at the theme level.

The problem with overriding theme_menu_local_tasks() is that you override/take a hatchet to the entire local task display, when you really just want to get in there with a scalpel to remove two specific local tasks. So, you need to get a little more specific.

theme_menu_local_tasks() gets the current page's local tasks and passes them to menu_local_tasks(). Here, two theme functions are used:

  1. theme_menu_item_link(), which gets the link markup for the task
  2. theme_menu_local_task(), which gets the <li> element for the task.

So, you can get rid of the View and Edit local tasks in a really robust way by overriding theme_menu_item_link() and theme_menu_local_task() to include your check for them:

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";  
  }
}

This way, you're relying on the menu router path, not modifying the menu router item, and achieving the result you want with minimal changes to core functionality or theming.

查看更多
该账号已被封号
6楼-- · 2019-03-09 09:41

On the module side, you could do something that decouples the Edit's menu entry from the local tasks for the node:

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

The edit path is still there, but now it is not associated with the View tab. This includes the edit page itself--no View tab there.

查看更多
家丑人穷心不美
7楼-- · 2019-03-09 09:44

The simplest solution to hide the tabs is to add this class in your theme css

.tabs{ display:none;}
查看更多
登录 后发表回答