Как скрыть Редактировать | Посмотреть вкладки?

Могу ли я скрыть

Редактировать | Просмотреть вкладки

в верхней части каждого узла?

Я искал эту опцию в настройках темы (как глобальной, так и стандартной темы, но не смог ее найти).

Я все еще хочу, чтобы мой клиент мог редактировать / администрировать контент, поэтому я не могу просто удалить разрешение на него.

спасибо

24
задан aneuryzm 20 August 2010 в 15:39
поделиться

4 ответа

Это презентация, а не функциональность, поэтому это нужно делать на уровне темы.

Проблема с переопределением theme_menu_local_tasks() заключается в том, что вы переопределяете/переносите топор на весь экран локальных задач, когда на самом деле вы просто хотите проникнуть туда со скальпелем, чтобы удалить две конкретные локальные задачи. Итак, вам нужно получить немного больше конкретики.

theme_menu_local_tasks() получает локальные задачи текущей страницы и передает их в menu_local_tasks(). Здесь используются две функции темы:

  1. theme_menu_item_link(), которая получает разметку ссылки для задачи
  2. theme_menu_local_task(), которая получает элемент
  3. для задание.

Таким образом, вы можете избавиться от локальных задач Просмотр и Редактировать действительно надежным способом, переопределив 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";  
  }
}

Таким образом, вы полагаетесь на путь маршрутизатора меню, не изменяя элемент маршрутизатора меню и достигая желаемого результата с минимальными изменениями основных функций или тем.

16
ответ дан 28 November 2019 в 22:56
поделиться

Я использую следующее в template.php по темам (что, возможно, немного взломано, мне кажется, мне следует подумать об отключении вкладок $ вместо этого):

function THEME_NAME_menu_local_tasks() {
  return '';
}

Или вы можете пропустить:

if ($tabs) echo $tabs;

со своей страницы.tpl.php ...

1
ответ дан 28 November 2019 в 22:56
поделиться

Со стороны модуля вы могли бы сделать что-то, что отделяет пункт меню «Правка» от локальных задач для узла:

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

Путь редактирования все еще существует, но теперь он есть не связан с вкладкой "Просмотр". Сюда входит и сама страница редактирования - вкладки «Просмотр» там нет.

9
ответ дан 28 November 2019 в 22:56
поделиться

Просмотр и редактирование - это функциональные возможности. У них есть причина быть там.

Лучший способ «удалить» их - полностью «удалить» эту функциональность. В конце концов: зачем удалять интерфейс части функциональности, а не саму функциональность ? Кроме того, просто не печатая вкладки, не удаляются конечные точки URL . Другими словами: если вы не распечатаете вкладку редактирования, люди все равно смогут получить доступ к странице редактирования.

Опять же: лучше всего удалить эту функцию: тот факт, что вам не нужна вкладка редактировать , звучит так, как будто вы не хотите, чтобы функция редактировать для определенных пользователей . Если да, то просто удалите это разрешение для этой роли. Вот и все. Вкладки исчезнут.

Если, однако, вы просто хотите отображать эти вкладки по-другому , Drupal - ваши друзья. Как вы могли заметить, они называются локальными задачами , а не вкладками . Это потому, что тема решает, как их отображать: тема - это то, что решает отображать их как вкладки.

Просто переопределите theme_menu_local_tasks () , чтобы создать свой собственный HTML для «локальных задач». И в вашем page-tpl просто переместите переменную $ tabs в нужное место.

Но еще раз: не пытайтесь изменить поведение приложения, удаляя элементы интерфейса.Это неправильно: вы должны изменить поведение, чтобы изменить поведение :)

1
ответ дан 28 November 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: