Переопределяющее меню крючка() {$элементы}


Например, вот фрагмент из модуля комментариев (comment.module):

function comment_menu() {
  $items['comment/%'] = array(
    'title' => 'Comment permalink',
    'page callback' => 'comment_permalink',
    'page arguments' => array(1),
    'access arguments' => array('access comments'),
  );
  $items['comment/reply/%node'] = array(
    'title' => 'Add new comment',
    'page callback' => 'comment_reply',
    'page arguments' => array(2),
    'access callback' => 'node_access',
    'access arguments' => array('view', 2),
    'file' => 'comment.pages.inc',
  );

  return $items;
}

Как я могу переопределить $items['comment/%'] с помощью $items['comment/reply/%node'], не взламывая ядро.

Другими словами, мне нужно example.com/comment/[cid] выглядеть точно так же, как example.com/comment/reply/[nid]/[cid]?

 6
Author: timofey.com, 2012-10-09

2 answers

Да, вы должны использовать hook_menu_alter Создайте новый модуль и добавьте hook_menu_alter

function my_module_menu_alter(&$items) {
    // Unset core path
    unset($items['comment/%']);
    $items['your/pass/here/%node'] = array(
        'title' => 'Add new comment',
        ...
      );
}

Но ссылка "комментарий/ответ/%nid/%cid" используется Drupal для ответов на другие комментарии (где %nid - идентификатор узла и %cid - идентификатор комментария, на который вы отвечаете). Используйте другой путь.

 8
Author: Gaydabura, 2012-10-09 21:34:57

Вы всегда можете использовать hook_menu_alter и передать тот же обратный вызов страницы и аргументы.

 1
Author: junedkazi, 2012-10-09 19:53:18