it-swarm-ko.tech

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

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

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

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

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

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

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

17
Camsoft

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

4
Adam S

Menu Node APIMenu Node Views 모듈을 사용하여 정확하게 수행 할 수 있습니다.

필요한 컨텐츠 유형으로보기를 작성하고 "메뉴 : 메뉴 링크 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;
      }  
   }
}
16
Emile Kott

Node Hierarchy Module 은 뷰 통합을 제공 할뿐만 아니라 이러한 유형의 관계를 허용합니다.

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

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

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

  • 원하는 경우 계층 메뉴 자동 생성.
  • 선택적 뷰 통합.
  • 선택 사항 Node 액세스 통합.
4
CCMonkey

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

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

짜잔. 작동하지 않아야 함 이지만 작동합니다.

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

2
aaronbauman

비교적 새로운 모듈 보기 메뉴 Node 하위 필터 가 있습니다.

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

2
nwellnhof

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

 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
bendev

Emile 의 대답은 맞습니다. 그러나 언급 된 PHP 코드를 컨텍스트 필터 유형 " 메뉴 : 부모 메뉴 링크 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
cptstarling

이 목적으로 Node Reference 사용을 고려 했습니까?

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

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

0
cptstarling

issue queue of Menu Node Views 에서이 멋진 솔루션이 있습니다.

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

    $menu_item = menu_get_active_trail();  
    $current_item = array_pop($menu_item);  
    $menu_item_plid = $current_item['plid'];  
    return $menu_item_plid;  
    
0
tostinni