메뉴 관계에 따라 자식 노드의 뷰를 만들려면 어떻게해야합니까?


17

메뉴 트리에 다음 페이지가 있다고 가정하십시오.

  • 프로젝트
    • 프로젝트 하나
    • 프로젝트 2
    • 프로젝트 세

하위 페이지의 그림, 제목 및 텍스트 (요약)를 표시하는 프로젝트 (부모) 페이지에 포함될 뷰를 만드는 방법을 찾고 있습니다.

부모와 자식 사이의 관계는 메뉴 트리에서 정의됩니다.

노드 참조를 사용할 수 있다는 것을 알고 있지만 누군가 페이지를 만들 때마다 메뉴 관계를 정의한 다음 노드 참조 관계를 정의해야합니다.

또한 다른 콘텐츠 유형을 만들 수 있다는 것을 알고 있지만 모든 콘텐츠 페이지가 동일하게 보이기 때문에 이것이 과도하다고 생각합니다.


1
다른 노드의 하위 메뉴에 표시되는 노드 사이에는 직접적인 관계가 없습니다 (메뉴 링크와 노드 사이의 유일한 연결은 메뉴 링크가 노드 / 니드를 가리키는 것입니다). 따라서 이러한 하위 노드를 함께 (및 상위 노드로) 연결하는 것이 필요합니다. 일반적인 분류 용어 인 book.module, ...
Berdir

답변:


4

한 가지 해결책은 분류 용어를 사용하여 관계를 정의한 다음 분류 메뉴 모듈 을 사용하여 해당 용어 관계를 메뉴 항목으로 변환하는 것입니다. 그런 다음 사용자 정의 페이지 모듈 및 컨텍스트 모듈을 사용하여 패널을 사용하지 않으려는 경우 모든 페이지의 정보 및 영역을 제어 할 수 있습니다.


16

메뉴 노드 API메뉴 노드보기 모듈을 사용하여이를 정확하게 수행 할 수 있습니다 .

필요한 컨텐츠 유형으로보기를 작성하고 "메뉴 : 메뉴 링크 ID"의 컨텍스트 필터를 선택하십시오 (위의 모듈이 설치된 경우에만 사용 가능).

"필터 값을 사용할 수없는 경우"에서 "기본값 제공"을 선택하고 "PHP 코드"를 선택하십시오.

다음 스 니펫이이를 수행하면 뷰에서 블록을 노출하기 만하면됩니다.

if (function_exists('menu_node_get_links')){  
   $node = node_load(intval(arg(1)));  
   if (isset($node->menu_node_links)){
      foreach($node->menu_node_links as $mlid=>$data){  
         return $mlid;
      }  
   }
}

3
현재 노드의 자식을 가져 오려면 필터가 "메뉴 : 부모 메뉴 링크 ID"여야한다고 생각합니다. 그리고 인수 코드는 다음과 같습니다. $ current = end (menu_get_active_trail ()); return $ current [ 'mlid'];
Stefan

고마워 @Stefan의 수정 사항 외에도 몇 가지 개선 사항이 있습니다. 1) 비용을 절약하기 위해 menu_load_object(arg(1))대신에 사용할 수 있습니다 node_load(). 2) 메뉴 항목이 관련된 메뉴에 있는지 확인해야합니다. 지금은 첫 번째를 반환하고 $mlid있습니다. foreach 내부 if ($data->menu_name == 'my-menu')에서이 문제를 해결하려면 조건 을 추가해야합니다 . 3) menu: hidden숨겨지지 않은 항목 만 반환 하기 위해 두 번째 필터를 추가 할 수 있습니다 . 동일한 스 니펫을 사용하지만 대신를 반환 $data->hidden;하십시오 $mlid.
Adam Balsam

2
아직 개발 단계에있는 모듈을 제안하지 않는 것이 좋습니다.
Ambidex

@Stefan은 모든 수준의 어린이를 데려다 줄 수 있습니까? 처음이 아니라
Eli Stone

4

노드 계층 모듈 이 관계 유형뿐만 아니라 회 통합을 제공 할 수있다.

노드 계층은 노드가 트리와 같은 컨텐츠 계층을 작성하는 다른 노드의 하위가 될 수 있습니다. 이 모듈은 다음을 제공합니다.

  • 계층 메뉴의 원 클릭 생성
  • 계층 적 빵 부스러기
  • Pathauto (및 토큰 모듈)를 사용하는 자동 계층 URL

    (예 : q = aboutus / history / beginning).

  • 원하는 경우 계층 메뉴 자동 생성
  • 선택적 뷰 통합.
  • 선택적 노드 액세스 통합.

2

D7 / Views 3에서 변경되었을 수도 있지만 원하는 동작을 수행하기 위해 PHP가 필요하지 않습니다.

  1. menu_views , menu_nodemenu_node_views 모듈을 설치 하십시오 .
  2. "메뉴 트리"유형의 새보기 작성
  3. "메뉴 : 링크 제목"및 "메뉴 : 설명"필드 추가
  4. 상황 별 필터 / 인수 추가 "메뉴 : 노드 ID"; 기본값 "URL의 컨텐츠 ID"제공
  5. 관계 추가 "메뉴 : 상위 메뉴 링크 ID"

짜잔. 그것은 작동하지 말아야 하지만 않습니다.

노드만으로는 잘 작동하지만 노드 계층 구조보다 메뉴 링크를 사용하면 노드 주위에 탐색을 빌드하는 데 제한되지 않는다는 이점이 있습니다. 뷰에 외부 링크를 포함시킬 수도 있습니다.


이것은 노드 링크를 노출시키는 좋은 옵션입니다 (Aaron Bauman 은이 샘플보기를 가져 오기 위해 붙여 넣기를 좋아합니다 : pastebin.com/u2GjmWG7 ). 그러나 OP가 요청 한대로 노드 필드를보기에 사용할 수있게하는 데 어려움이있었습니다. 그것이 어떻게 성취됩니까?
doub1ejack

"메뉴 : 노드 ID"에 관계를 추가하여 노드 필드를 표시 할 수 있어야합니다. 그런거 보여요?
aaronbauman

2

당신이 원하는 것을 정확하게하는 것처럼 보이는 비교적 새로운 모듈의 Views Menu Node Children Filter 가 있습니다.

이 모듈은 메뉴 구조에 따라 노드의 하위 노드를 검색하는 컨텍스트 필터를보기에 추가합니다.


0

이 목적으로 노드 참조 사용을 고려 했습니까 ?

  1. 표시하려는 컨텐츠 유형에 대한 노드 참조 필드를 제공하십시오.
  2. 해당 필드를보기에서 컨텍스트 필터로 사용하십시오 (기본값 : url의 Content ID ).
  3. 이보기 표시를 컨텐츠에 블록으로 추가하십시오. 표시되는 노드는 예를 들어이를 참조하는 노드의 부모로 표시됩니다.

따라서 원하는 결과와 비슷한 결과를 얻을 수 있습니다.


0

Emile 의 대답 은 맞습니다. 그러나 언급 된 PHP 코드를 " Menu : Parent menu link id " 유형 의 상황 별 필터 에 붙여 넣어야했습니다 .

if (function_exists('menu_node_get_links')){  
   $node = node_load(intval(arg(1)));  
   if (isset($node->menu_node_links)){
      foreach($node->menu_node_links as $mlid=>$data){  
         return $mlid;
      }  
   }
}

0

엔터티 변환을 사용하고 노드가 다른 메뉴에 연결되어 있으면 현재 언어를 필터링하는 코드가 적용됩니다. 다른 답변에서 설명한 것처럼보기에서 컨텍스트 필터 (상위 메뉴 링크 ID)의 PHP 코드로 복사해야합니다.

 if (function_exists('menu_node_get_links')) {
global $language;
$lang = $language->language;
$node = node_load(intval(arg(1)));
if (isset($node->menu_node_links)) {
  foreach ($node->menu_node_links as $mlid => $data) {  
    if ($lang == $data->language) {
      return($mlid);
    }
  }
}
  }

0

메뉴 노드 뷰이슈 큐에서 다음 과 같은 훌륭한 솔루션을 얻을 수 있습니다.

  • '부모 메뉴 링크 ID'가 포함 된 상황 별 필터 추가
  • '기본 값 제공'을 선택하십시오.
  • '맞춤 PHP 코드'를 선택하십시오
  • 다음 코드를 입력하십시오

    $menu_item = menu_get_active_trail();  
    $current_item = array_pop($menu_item);  
    $menu_item_plid = $current_item['plid'];  
    return $menu_item_plid;  
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.