분류 메뉴를 표준 메뉴 항목의 하위 메뉴로 삽입하려면 어떻게해야합니까?


12

다음과 비슷한 최상위 구조의 기본 메뉴가 있습니다.

Home - Categories - Something Else - ... - Contact

이러한 최상위 링크 각각은 해당 노드 페이지로 이동합니다.

카테고리 (다단계)에 대한 어휘가 있으며 "카테고리"항목 아래의 하위 메뉴에서 해당 분류 용어를 가져와야합니다. 어휘와 마찬가지로 하위 메뉴가 커지거나 줄어들어야하므로 항목을 기본 메뉴로 하드 코딩하지 않기를 원합니다.

분류 작업에 후크 그 (것과 매우 유사한 기반으로 특정 메뉴의 하위 항목 관리하고이를 달성하기 위해 내가 쓴 과거 오버 정교한 코드에서 분류 메뉴가 않습니다, 그러나 각각 다른 메뉴가 필요없이 어휘).

이 방법은 효과가 있지만 이상적이지 않으며 일반적이지 않습니다. 이전 프로젝트에서 새 프로젝트로 해당 코드를 들어 올릴 수 없으며 합리적인 양의 사용자 정의가 필요합니다.

이에 대한 '표준'모듈 기반 솔루션이 있어야한다는 느낌을 줄 수 없습니다.

나는 여러 가지 다른 모듈을 조합하여 사용하는 몇 가지 제안을 보았습니다 (일부는보기 기반 모듈을 사용하도록 제안하는 것이 이상합니다). 나는 어떤 제안에도 개방적이지만 1 개 또는 2 개 이상의 모듈을 설치하고 하드 코딩 된 상황에 맞는 구성을 포함하는 경우이 경우 너무 도움이되지 않을 것입니다.


1
나는 그것을 본 것 같아요 ... 비슷한 주제 는 메뉴에서 분류법 기반 항목을 만들기 위해 규칙을 사용하는 것에 대한 아이디어를 담고 있지만 이상적이지는 않습니다.
Mołot 2016 년

내가 올바르게 이해한다면,이 모듈 drupal.org/project/taxonomy_treemenu 와 비슷하게 보입니까? 좋은 메뉴와 통합 할 수는 있지만 D6
Bala

실제 메뉴 항목이 있어야하거나 렌더링 될 때 분류 용어 트리를 메뉴에 추가 할 수 있습니까?
rooby 2016 년

@Bala에게 감사드립니다. 그래도 D7 솔루션이 필요합니다
Clive

1
Clive 한 가지 제안이 있습니다. 아시다시피 어휘 이름이 포함 된 분류법 메뉴를 생성 한 다음 다른 메뉴 링크를 생성 된 메뉴에 직접 추가 할 수 있습니다. 분류 항목이 정식으로 업데이트 될 수 있습니다. 작동하는지 모르겠습니다. 시도해보십시오.
milkovsky

답변:


13

옵션 a) 내가 잘못 생각하지 않는 한, 분류 메뉴를 만들 때 (메뉴 위치)를 분류 할 위치를 선택할 수 있습니까? 내가 얻을 수 있다고 생각하는 유일한 문제 는 분류법이 업데이트 될 때마다 메뉴를 다시 작성해야 한다고 생각 합니다.

옵션 b) 내 사이트에서 이와 비슷한 것을 수행했으며 메뉴 뷰 모듈을 사용하여 기본 메뉴에 뷰를 넣을 수있었습니다.

모든 분류 용어를 나열하는 새보기를 블록 표시로 작성하는 경우 필요에 따라보기에 추가 필터링 / 수정을 적용하십시오 (내 예제에서는 원하지 않았을 수도 있음). 그런 다음 기본 메뉴에 새 링크를 추가 할 때 링크가 아닌보기를 사용하도록 선택할 수 있습니다. 거기에서 사용하려는보기를 선택하고 'Category'메뉴 항목을 부모로 선택하고 저장하십시오 (저장 한 다음 메뉴에서 활성화해야합니다. 모듈 자체의 버그 인 것처럼 보입니다)

이것이 최선의 해결 책임을 보장 할 수는 없지만 테스트했을 때 효과가있었습니다.


1
예, 내가 어리석은 것으로 나타났습니다-분류법 메뉴에는 정확한 기능이 내장되어 있습니다 (옵션 a). 내가 다루는 특정 메뉴는 매우 작으며 범주는 자주 변경되지 않으므로 재구성은 문제가되지 않습니다. 위생 검사에 대한 많은 감사
Clive

3

Menupoly 에는 사용자 정의 "메뉴 트리 소스"를위한 API가 있습니다. 메뉴 링크 이외의 다른 용도로는이 기능을 사용하지 않았으므로 해결해야 할 문제가있을 수 있습니다. 그러나 기본 아키텍처가 있습니다.

이 길을 가면

  • "카테고리"페이지 이외의 분류 용어 링크없이 기존 기본 메뉴를 사용하십시오.
  • 그것과 관계없이 분류 트리를 만드십시오.
  • 일반적인 방법으로 menu_links에서 가져 오는 사용자 정의 "메뉴 트리 소스"를 작성하십시오. 그러나 분류 용어를 찾으면 대신 분류 체계에서 가져옵니다.
    따라서 "카테고리"링크가 분류법 관련임을 감지 할 수 있어야합니다.
  • 메뉴 링크가 분류법과 관련되어 있고 동시에 정기적 인 하위 메뉴가있는 경우 두 가지 유형의 하위를 함께 혼합해야합니다.

이 경로는 약간의 작업이지만 다른 사람에게는 유용 할 수 있으며 사이트 별 논리보다 더 우아하고 재사용 할 수 있습니다.

현재 분류 ​​체계 전용 "메뉴 트리 소스"조차 존재하지 않으므로 혼합 플러그인으로 시작하기 전에 합리적인 첫 번째 단계 일 것입니다.


앤드류 모리스의 대답은 완벽하게 충분할 것입니다. 그리고 그것은 나를 위해 더 적은 일을 의미합니다 :) 여전히 유용하다고 생각하는 사람을 위해 이것을 게시하고 싶었습니다.
donquixote

V. 흥미 롭습니다. 감사합니다. 받아 들여진 대답은 잘 작동하지만 코드 솔루션도 매우 흥미 롭습니다. PSR-0을 기반으로 구축 된 모듈 중 하나라고 가정 할 수 있습니까? :)
Clive

이것은 xautoload의 PHP 5.2 호환 모드를 사용하는데, PEAR와 비슷하지만 디렉토리가 얕습니다. 따라서 PSR이 승인하지 않았습니다. 나는 언젠가 PSR-0에 갈 수 있습니다 ..
donquixote

비록 PSR-X에 흥미가 있지만 (슬프게도 D8에 빠지지 않을 것입니다)
donquixote

2

Metro Menus 는 요구 사항을 수행하며 스킨이 내장되어 있으며 멋진 메뉴처럼 작동하는 고유 한 스킨을 만들 수 있습니다. 이 모듈을 사용하면 메뉴 또는 분류 체계에서 깊이가 있는 하위 항목선택할 수 있으며 이전에는 사용하지 않았습니다.

터치 스크린 (iPad, iPhone 등)과 호환됩니다.

여기에 이미지 설명을 입력하십시오


2

Om Maxi 메뉴 모듈도 사용할 수 있습니다 . 관리자는 첨부 파일로 원하는 블록이있는 메뉴, 뷰, 슬라이드 쇼, 메뉴, 사용자, 멋진 메뉴, 빠른 탭 및 테이블, 목록, 이미지, 비디오 등이있는 사용자 정의 블록 등의 메뉴를 만들 수 있습니다.

분류법 메뉴를 사용하여 별도의 메뉴를 만들 수 있으며이 메뉴를 om maxi 메뉴에서 생성 된 메뉴의 하위 링크로 연결할 수 있습니다.

감사


2

최근에 제품 카테고리 메뉴와 비슷한 작업을 수행했습니다. 깊이는 1 레벨에 불과하지만 추가 레벨을 표시하도록 쉽게 수정할 수 있습니다.

/**
 * Implements theme_menu_link().
 */
function THEME_menu_link__main_menu($variables) {

  $sub_menu = '';
  $element = $variables['element'];
  $menu_string = $element['#title'];

  if (module_load_include('inc','pathauto','pathauto') !== FALSE) {
    $menu_string =  pathauto_cleanstring($menu_string);
  }

  if ($menu_string == 'categories') {
    $sub_menu = get_categories_menu();
  }

  if ($sub_menu) {
    $element['#attributes']['class'][] = 'haschildren';
  }

  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}

function get_categories_menu() {

  $current_category = arg(2); // Get current category from path
  $volcab = taxonomy_vocabulary_machine_name_load('product-categories');
  $tree = taxonomy_get_tree($volcab->vid,0,1);

  $output = '<ul class="menu product-category">';
  foreach ($tree as $term) {
    $safe_term = pathauto_cleanstring($term->name);
    $class = ($current_category==$safe_term) ? ' class="active"' : '';
    $output .= '<li><a' . $class . ' href="/drupal//path/to/' . $safe_term . '">' . $term->name . '</a></li>';
  }
  $output .= '</ul>';

  return $output;
}

get_category_menu 함수는 블록으로 사용하는 것이 좋지만 여기서는 편의상 template.php에 다른 함수로 표시됩니다.

그것이 해결책을 향한 도움이되거나 적어도 단계가되기를 바랍니다.

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