Drupal 6: заставить menu_hook () возвращать определенный вид - PullRequest
1 голос
/ 15 февраля 2011

Я создал хук, чтобы добавить пункт в меню администратора. Когда пользователь нажимает на элемент, я хочу вернуть содержимое определенного представления, которое я создал. Как я должен вернуть вид?

Мой текущий код выглядит так:

function my_view_menu(){
   $items['view'] = array(
    'title' => 'Report', 
    'page callback' => 'return_my_view', 
    'access arguments' => array('access content'), 
    'type' => MENU_NORMAL_ITEM,
  );    
   return $items;
}

function return_my_view(){
  return t("Hello!");
} 

EDIT:

Как предположил Бердир, это правильный способ вызова представления:

function return_my_view(){
  $viewName = 'my_report'; // use the machine readable name of the view
  return views_embed_view($viewName);
} 

Ответы [ 5 ]

5 голосов
/ 15 февраля 2011

Вы можете просто добавить пункт меню в самом представлении ... и ограничить доступ (к представлению) выбранной ролью администратора:)

  1. В вашем представлении выберите «страница» инажмите кнопку «Добавить отображение» (если страница еще не отображена).
  2. В разделе «Параметры страницы» добавьте «Путь» и «Обычный» пункт меню в меню навигации.
  3. Далее. В разделе «Основные настройки» измените доступ к роли и выберите роль, которая должнаaccess
  4. Наконец, перейдите в настройки меню навигации и перетащите новый пункт меню в нужное место в меню администрирования
4 голосов
/ 15 февраля 2011
3 голосов
/ 15 февраля 2011

views_embed_view () - правильный вызов. Если вы получаете пустую страницу, попробуйте проверить журнал ошибок Apache, чтобы увидеть, есть ли какие-либо ошибки php. Я также заметил, что в вашем пересмотренном примере вы использовали $ viewName = "my-report", но views_embed_view () ожидает машиночитаемое имя представления, которое допускает только буквы, цифры и символы подчеркивания. Возможно, вы используете неправильное имя?

2 голосов
/ 21 февраля 2012

В дополнение к комментарию Бердира, вы также можете пропустить промежуточную функцию обратного вызова и просто вызвать views_embed_view прямо из маршрутизатора меню:

function hook_menu(){
   $items['path/to/my/view'] = array(
    'title' => 'Report', 
    'page callback' => 'views_embed_view',
    'page arguments' => array('my-view-name'),
    'access arguments' => array('access content'), 
    'type' => MENU_NORMAL_ITEM,
  );    
  return $items;
}
2 голосов
/ 16 февраля 2011

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

  1. Создайте модуль весом не менее 11 (больше веса, чем просмотры)
  2. Реализуйте hook_menu_alter() и продублируйте запись View.

    function example_menu_alter(&$items) {
      $items['admin/new/path'] = $items['original/view/path'];
    }
    

Этот подход несколько запутан, но иногда является полезной альтернативой для представлений или другого контента "страницы", который вы хотите клонировать.

...