it-swarm.dev

node_view ()를 사용하여 노드를 표시하면 로컬 메뉴 항목이 인쇄되지 않습니다.

Node_view ()를 사용하여 노드를 표시 할 때 (hook_menu ()에서 호출 된 함수의 리턴을 통해) 일반적인보기/편집 탭이 없습니다.

예상되는 동작입니까?

2
digital

네, 예상됩니다. 그 이유는 노드의 뷰 경로가 node/[nid]이고 편집/뷰가 node/[nid]/edit이기 때문입니다. hook_menu_alter로 기본 노드 경로를 변경하면 모든 노드의 탭이 사라집니다.

그 이유는 유형이 MENU_LOCAL_TASK이기 때문입니다. 자세한 내용은 hook_menu 에 대한 문서를 확인하세요.

3
googletorp

예상되는 동작입니다. node_view () 의 목적은 http://example.com/node/<nid>에서 일반적으로 볼 수있는 다른 탭도 생성하는 것이 아니라 노드 뷰를 구축하는 것입니다.

노드 페이지에서 수행 한 작업을 에뮬레이션하려면 다음 메뉴 구조를 정의해야합니다 (나는 page 임의로 선택했습니다).

/**
 * Implements hook_menu().
 */
function mymodule_menu() {
  $items['page/%node'] = array(
    'title callback' => 'node_page_title', 
    'title arguments' => array(1), 
    'page callback' => 'mymodule_page_view', 
    'page arguments' => array(1), 
    'access callback' => 'node_access', 
    'access arguments' => array('view', 1), 
    'type' => MENU_CALLBACK,
  );
  $items['page/%node/view'] = array(
    'title' => 'View', 
    'type' => MENU_DEFAULT_LOCAL_TASK, 
    'weight' => -10,
  );
  $items['page/%node/edit'] = array(
    'title' => 'Edit', 
    'page callback' => 'mymodule_page_edit', 
    'page arguments' => array(1), 
    'access callback' => 'node_access', 
    'access arguments' => array('update', 1), 
    'weight' => 1, 
    'file' => 'node.pages.inc',
    'file path' => drupal_get_path('module', 'node'), 
    'type' => MENU_LOCAL_TASK,
  );

  return $items;
}

mymodule_page_view()node_view()을 호출하는 페이지 콜백입니다.

3
kiamlaluno

모듈에 의해 추가 된 모든 잠재적 탭을 노드로 이동하고 다른 새 사용자 지정 경로에 표시되도록하려면 메뉴 캐시 라우터가 재 구축 될 때 링크를 동적으로 변경합니다.

모듈에 다음을 붙입니다.

    /**
 * Implementation of hook_menu_alter().
 */
function example_menu_alter(&$callbacks) { 
  foreach($callbacks as $path => $menu) {
    $callbacks[$path];

    if (strpos($path, 'node/%node/') !== FALSE) {
      $newpath = str_replace('node/%node/', 'customurl/%/%/%/%node/', $path);
      $callbacks[$newpath] = $menu;
      unset ($callbacks[$path]);
    }
  }
}
1
budda