我可以隐藏吗?
编辑| 视图
每个节点顶部的标签?
我在主题设置中搜索了这个选项(全局和标准主题,但我找不到它).
我仍然希望能够让我的客户编辑/管理内容,所以我不能只删除它的权限.
谢谢
小智 19
这是一个非常简单的解决方案.(Drupal 7)
在当前模板中打开page.tpl.php并搜索$ tabs变量.
如果要完全隐藏它,请删除渲染代码.
如果只想向管理员显示它,请使用此代码
<?php if ($tabs and $is_admin): ?>
<div class="tabs">
<?php print render($tabs); ?>
</div>
Run Code Online (Sandbox Code Playgroud)
上面的代码检查用户是否是管理员.如果是,它将呈现标签.如果不是它不会渲染它们.
小智 16
这真的是一个表现性的东西,而不是一个功能性的东西,所以它应该在主题层面完成.
覆盖的问题theme_menu_local_tasks()是,当你真的只想用手术刀去除两个特定的本地任务时,你覆盖整个本地任务显示器.所以,你需要更具体一点.
theme_menu_local_tasks()获取当前页面的本地任务并将其传递给menu_local_tasks().这里使用了两个主题函数:
theme_menu_item_link(),获取任务的链接标记theme_menu_local_task(),它获取<li>任务的元素.因此,您可以通过覆盖以及包含对它们的检查,以非常强大的方式摆脱查看和编辑本地任务:theme_menu_item_link()theme_menu_local_task()
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";
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您就依赖于菜单路由器路径,而不是修改菜单路由器项,并且只需对核心功能或主题进行最少的更改即可实现您想要的结果.
在模块方面,您可以执行一些操作,将Edit的菜单项与节点的本地任务分离:
function custom_menu_alter(&$items) {
$items['node/%node/edit']['type'] = MENU_CALLBACK;
}
Run Code Online (Sandbox Code Playgroud)
编辑路径仍然存在,但现在它与"视图"选项卡无关.这包括编辑页面本身 - 那里没有"查看"选项卡.