it-swarm-ko.tech

drupal 7에서 메인 시스템 메뉴의 테마를 연결하여 일부 요소 만 표시하는 방법은 무엇입니까?

Drupal)에서 메인 시스템 메뉴를 수정하고 싶습니다. 7. 실제로는 메뉴의 일부 특정 요소 만 표시하고 주어진 경우에 다른 특정 요소를 숨기고 싶습니다. 함수의 if 또는 switch 문).

이 작업을 수행하는 가장 쉬운 방법은 무엇입니까? 그리고 그것을하는 방법? 예를 들어 줄 수 있습니까?

hook_theme 또는 hook_menu를 사용하여 할 수 있다는 것을 읽었지만 어떻게해야할지 모르겠습니다.

3
Ek Kosmos

시스템 메뉴를 변경하는 데는 여러 수준이 있습니다. drupal 상거래가 관리자 상점 섹션에 대해 수행하는 것과 같은 최상위 컨테이너를 추가하려면 다음과 같은 후크 메뉴가있는 메뉴 항목을 추가해야합니다.

// Top level "Store" container.
$items['admin/commerce'] = array(
  'title' => 'Store',
  'description' => 'Administer your store.',
  'page callback' => 'system_admin_menu_block_page',
  'access arguments' => array('access administration pages'),
  'file path' => drupal_get_path('module', 'system'),
  'file' => 'system.admin.inc',
  'weight' => -7,
);

system_admin_menu_block_page는 시스템 메뉴의 일부로 만드는 작업을 수행합니다.

구성 등의 섹션 중 하나 아래에 메뉴를 표시하려면 hook_menu, fx에서 경로를 조정하기 만하면됩니다.

$items['admin/config/section'] = array(...);

다른 메뉴 항목을 포함해야하는 섹션을 만들 때마다

'page callback' => 'system_admin_menu_block_page',
'access arguments' => array('access administration pages'),
'file' => 'system.admin.inc',
'file path' => drupal_get_path('module', 'system'),

섹션에서 메뉴 항목을 만들 때 일반 메뉴 항목을 만듭니다.

업데이트
메뉴 구조가 캐시되기 때문에 사용자 별 시나리오로 메뉴를 변경할 수 없습니다. 그러나 여전히 사용할 수있는 몇 가지 방법이 있습니다.

  • 메뉴는 사용자에게 액세스 권한이있는 경우에만 표시되므로 모든 메뉴에 대한 사용자 지정 액세스 제어 기능을 만들고 여기에 논리를 넣을 수 있습니다.
  • 테마 레이어에서이 작업을 시도하고 원하는 메뉴 만 표시하도록 출력을 변경할 수도 있습니다. 나는 이것을 Drupal 7에서 시도하지 않았지만 일반적으로 메뉴 시스템이 매우 복잡하기 때문에 이러한 방식으로 메뉴의 출력을 변경하는 것은 어렵습니다.

메뉴를 변경해야하는 경우 액세스 제어를 변경하려면 hook_menu_alter를 사용해야합니다.

3
googletorp

조건에 따라 메뉴를 숨기고 싶습니다. 그러나 조건이 무엇인지에 따라 다릅니다. 역할을 기반으로 할 수 있다면이를위한 모듈이 있습니다 : Menu Per Role

논리가 더 복잡한 경우 다른 경우에 대해 다른 메뉴를 만들어야 할 수 있습니다. 메뉴 시스템은 메뉴를 캐시하므로 동적으로 변경하기가 어렵습니다. 여러 메뉴를 생성하면 Menu Block 모듈을 사용하여 조건에 따라 블록에 다른 메뉴를 표시 할 수 있습니다.

2
cleaver

사용 사례에 대한 자세한 정보 ( "함수에서 if 또는 switch 문으로 구현할이 신비한 조건의 내용"및 "메뉴의 일부"정의 포함) 없이는 어렵습니다. 확실한 답을 제공합니다.

Drupal의 메뉴 시스템은 다양한 사용 사례와 메뉴 구조를 처리하도록 설계된 복잡한 도구입니다. 표준 디스플레이 로직은 실제로 액세스 할 수있는 링크 만 사용자에게 표시하도록 설계되었으므로 Drupal 사용자가 403 페이지에 도달해서는 안됩니다.

메뉴 시스템은 또한 hook_translated_menu_link_alter()을 통해 메뉴 링크 (및 가시성)의 동적 변경을 지원하지만 약간의 작업이 필요합니다.

  • 먼저 대상으로 지정하려는 메뉴 링크를 "변경 가능"으로 표시해야합니다. 예를 들어 메뉴 라우터 항목 인 경우 hook_menu_link_alter () 또는 hook_menu_alter ()에서 $link['options']['alter']를 TRUE로 설정합니다.
  • 그런 다음 hook_translated_menu_link_alter()을 구현하고 숨기려는 링크의 'access' 속성을 FALSE로 설정할 수 있습니다.

이미 언급 한 menu_per_role 모듈과 같은 패키지 별 솔루션을 사용할 수도 있습니다.

테마 수준에서 렌더링하기 직전에 메뉴 구조를 수정하는 것은 never 해결책입니다.

2
Damien Tournoud

테마 템플릿 파일이나 전 처리기에서이 작업을 수행 할 수있는 여러 가지 방법이 있습니다. 그러나 메뉴에서 링크를 원하지 않는 경우/admin/build/menu로 이동하여 메뉴에서 제거하지 않는 이유는 무엇입니까?

1
Jeremy French