임의의 깊이의 간단한 분류 체계 브라우저를 작성하는 깨끗한 방법


23

나는 다음을 수행하는 확실한 방법을 결정하기 위해 며칠을 보냈습니다.

  1. 하위 용어에 대한 링크가 포함 된 어휘에 모든 최상위 용어 목록을 표시합니다.
  2. 링크를 클릭하면 해당 용어 의 하위 목록으로 이동하십시오 .
  3. 해당 용어로 태그가 지정된 노드 목록이 표시되는 최하위 용어까지 광고 무제한.

이것은 일반적으로 필요한 기능 인 것처럼 보이지만 특히 모든 용어 트리가 같은 깊이로 내려 가지 않는 경우 임의의 깊이를 처리 할 수있는 솔루션을 찾을 수 없습니다.

이상적인 솔루션은 Views 3, Contexts, EntityFieldQueries 또는 Drupal 7에서 잘 지원되는 다른 것을 사용하는 솔루션입니다.

나는 용어 관계 (term, term 's parent, term 's parent 's parent)와 순차 컨텍스트 필터에 대한 사용자의 세 가지 노드로 간단한보기를함으로써 원하는 것을 거의 정확하게 수행 할 수 있습니다. 이것의 유일한 문제점은 깊이가 너무 작은 용어 경로를 가진 노드가 있으면 "분류되지 않은"으로 표시되고 데드 링크를 생성한다는 것입니다. 그 대신에 다음 이용 가능한 용어에 연결하고 싶습니다.

답변:


23

Views 모듈 만으로이 작업을 수행하는 방법을 찾았습니다. 완벽하지는 않습니다. 분류 체계가 포함 된 멋진 URL과 이동 경로를 생성하지 않아 단일 깊이의 분류 체계에 대한 솔루션이 수행하는 방식이됩니다.

정적 깊이 브라우저

정적 깊이의 분류 (모든 용어가 동일한 깊이의 하위 용어를 갖는 경우)의 경우 다음을 수행합니다.

  1. 노드 의 뷰 생성
  2. 분류 용어 (Term)에 관계 추가
  3. 용어 (부모)를 통해 액세스 할 수있는 분류 용어 부모에 관계 추가
  4. 부모 (부모 부모)를 통해 액세스 할 수있는 분류 용어 부모에 관계 추가
  5. 분류 체계 수준에 필요한만큼 4 단계를 반복하십시오.
  6. 각각에 대한 상황 별 필터를 추가하고 순서가 올바른지 확인하십시오. 필터가 URL에 없을 때 요약을 표시하도록 설정하십시오.
  7. 각 필터에 대한 이동 경로 및 제목을 무시하고 싶을 것입니다.
  8. ???
  9. 이익

가변 깊이 브라우저

가변 깊이의 분류 (일부 용어 트리가 다른 것보다 더 깊은 중첩 수준을 갖는 경우)의 경우 좀 더 복잡합니다.

  1. 어휘에 새로운 최상위 용어 (Foo)를 추가하고 다른 모든 용어를 그 아래에 넣으십시오.
  2. 용어 이름을 표시하는 페이지가있는 용어 보기 작성
  3. 상황 별 필터 추가 : 분류 용어 : 상위 용어
  4. 기본값이 URL에 없으면 기본값을 제공하십시오.
  5. 기본값을 최상위 용어 이름 (Foo)으로 설정
  6. 유효성 검사 기준 지정
    • 검사기 : 분류법 용어
    • 기준 : 어휘 이름
    • 필터 값 유형 : 용어 이름을 용어 ID로 변환
  7. 뷰에 첨부 파일을 추가하려면 뷰 패널의 상단에있는 "+ 추가"버튼을 클릭하십시오.
  8. 이 첨부 파일에만 추가 (재정의) 관계 : 분류 용어 : 용어가 포함 된 컨텐츠
  9. 이 첨부 파일에만 추가 (재정의) 표시 : 필드 : 노드에 연결된 노드 제목 및 첨부 파일에서만 제거 : 표시 : 필드 : 용어 이름
  10. 이 첨부 파일에만 추가 (재정의) 상황 별 필터 : 분류 용어 : 이름
  11. 필터 값을 사용할 수없는 경우 기본값을 제공하십시오. URL의 원시 값 : 경로 구성 요소 : 2 (또는 페이지 경로에> 1 구성 요소가있는 경우 이상)
  12. 첨부 파일 설정 : 첨부 : [방금 만든 페이지 표시 이름]
  13. ???
  14. 이익

조회 용 UI 스크린 샷 : 여기에 이미지 설명을 입력하십시오


잘 했어요! 질문과 답변을 모두지지하는 것은 상당히 흔한 일처럼 보이며 솔루션은 처음에 답변을 시도하는 동안 찾은 것보다 낫습니다.
8:31에

8
  1. 분류 체계 유형의보기 작성
  2. 분류 용어 유형의 컨텍스트 필터를 추가하십시오 . 상위 용어
  3. 기본값 제공을 설정 하고 고정 된 상태로 유지하십시오. 상위 상위 학기의 학기 ID를 제공하십시오
  4. 분류 용어 ID 를 필드로 추가 하고 표시에서 제외
  5. 추가 분류 기간 이름 링크로이 분야를 넣어 밖으로에 클릭; 링크를 "view-path-you-set-in-view / [tid]"로 지정
    하십시오. 참고 : "이 필드를 분류 용어 페이지에 링크"를 선택 해제해야합니다.

보기 페이지를 방문하면 최상위 부모의 자녀가 나타납니다. 예제에 따라 다음을 얻을 수 있습니다.

  • 1 학기
  • term2

term1을 클릭하면 자녀가 생깁니다. 1.1.1에 도달 할 때까지 term1.1.1을 아직 클릭하면 결과가 나타나지 않습니다. 이를 위해 위의 뷰에서 하나 이상의 뷰 블록을 생성해야합니다.

  1. 블록 추가
  2. 기존의 상황에 맞는 필터 및 필드 제거
    참고 : 당신이 그들을 당신이 선택해야합니다 제거하면 이 페이지 (오버 라이드) 옆에있는 상단의 드롭 다운에서 를 들어 당신은 또한 사라 될 페이지에서 만든 다른 현명한 필드와 상황에 맞는 필터 .
  3. 새로운 상황 별 필터 분류 용어 추가 : 용어 ID
  4. 관계 추가 분류 용어 : 용어가 포함 된 컨텐츠
  5. 컨텐츠 제목을 추가하면 맨 위에있는 드롭 다운에서 관계를 사용합니다.
  6. 보기를 저장하고 우리가 만든 페이지로 돌아갑니다 (다른 방법으로는 다음 단계를 완료 할 수 없습니다)
  7. FOOTER OR HEADER에 필드 추가
  8. 목록에서 "Global : View area"를 선택하고 드롭 다운 View 에서 생성 한 블록을 선택하여 확인하십시오 컨텍스트 필터 상속을 하여이 뷰의 값을 블록으로 전달할 수도 있습니다.
  9. 이보기에 결과가 표시되지 않을 때 블록이 계속 표시되도록 보기에 결과가없는 경우에도 표시를 확인하십시오

보기를 저장하면 완료됩니다.


나는 Mohammed Shameem의 명확한 설명을 따랐다. 감사합니다, 완벽하게 작동합니다!
Steven

3

당신이 원하는 것은 Views Tree , Views 를 사용 하여 분류법 용어 트리를 만드는 Contrib 모듈입니다 .

(잠깐 시간을 내면 세금 필드를 볼 수있는 빠른 사용법을 쓸 것입니다)

분명히 그 모듈에 문제가 있습니다 에 분류 용어를 사용할 수 . 우우.

즉, 당신이 원하는 것을하는 것처럼 보이는 다음 코드를 발견했습니다 (꽤 기본적인 jQuery 코드를 통해 요소를 표시하거나 숨길 수 있습니다).

<?php

// The ID of the taxonomy vocabulary for which you'd like to create a nested list
$vid = 10;

$depth = 0;
$num_at_depth = 0;
$tree = taxonomy_get_tree($vid);

print "<ul class=\"menu\">\n<li>";
foreach ($tree as $term) {
  $diffdepth = 0;
  if ($term->depth > $depth) {
    print "\n<ul>\n<li>";
    $depth = $term->depth;
    $num_at_depth = 0;
  }
  if ($term->depth < $depth) {
    $diffdepth = $depth - $term->depth;
    while ($diffdepth > 0) {
      print "</li>\n</ul>\n";
      $diffdepth--;
    }
    $depth = $term->depth;
  }
  if (($term->depth == $depth) && ($num_at_depth > 0)) {
    print "</li>\n<li>";
  }
  print l($term->name, 'taxonomy/term/' . $term->tid);
  $num_at_depth++;
}
print "</li>\n</ul>\n";

" 페이지로 연결되는 중첩 된 카테고리 목록 "을 통해 .


해당 모듈을 활성화하고 실험을 시도했는데 두 가지 문제가 있습니다. 1. 다중 페이지 브라우징 경험이 아닌 단순한 목록을 제공한다고 생각합니다. 2. 작동하지 않습니다. 사용법이 가장 도움이 될 것입니다.
beth

답변이 업데이트되었습니다. 사과, 분명히 Views Tree는 분류 용어를 사용하여 공개적인 문제가 있습니다. 대체 답변이 게시되었습니다.
14시 43 분

순차적으로 페이지가 표시되는 브라우저가 아닌 간단한 중첩 목록을 제공하는 것으로 보입니다.
beth

@ beth-부모 / 자식 항목을 클릭 할 때 해당 목록의 요소를 표시하거나 숨기는 jQuery를 작성하면 충분합니까?
14시 56 분

JavaScript에 의존하고 싶지 않습니다.
beth

0

동적 분류법 브라우징 페이지 세트를 원한다면 다음 방법 을 사용하여 뷰를 사용하여 페이지의 내용을 표시 할 수있는 3 Views + Taxonomy Display 모듈이 필요 taxonomy/term/%합니다.

  1. 최상위 용어 -부모가 null 인 용어 나열
  2. 중간 수준 용어 -부모가 null이 아닌 용어를 나열합니다. 결과 없음 : 디스플레이 # 3 표시
  3. 약관 노드 - 목록 노드 용어 태그.

보기 1과 2가 비슷한 방식으로 주제가되기 때문에 하나의보기에 디스플레이로 병합하는 것을 고려할 수 있습니다. 더 쉽게 관리 할 수 ​​있습니다.

나는 그 분류법에 그 접근법을 성공적으로 사용했다. 운 좋게도 각 수준에서 균질했습니다. 주어진 가지가 잎 (노드) 또는 가지 (용어)로 끝나지 만 둘다는 아닙니다. 이것이 제한 사항이라면 먼저 테스트하십시오.

물론 이것은 "의사 코드"입니다. 구조를 반영하기 위해 유효성 검사 및 필터와 논리적으로 보이는 멋진 경로 자동 패턴을 설정하려고합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.