메뉴 블록을 테마하는 방법?


11

맞춤 메뉴 ( "mynav"라고 함)를 만들었고 테마에서 block--menu--menu-mynav.tpl.php다음을 포함 하는 템플릿 ( )을 만들었습니다 .

<div id="mynav" class="<?php print $classes; ?>"<?php print $attributes; ?>>
  <?php print $content ?>
</div>

이것은 잘 작동합니다.

그러나 ID를 생성하고에 포함 된 정렬되지 않은 목록에 적용하고 싶습니다 $content. 다음 MYTHEME_links__system_mynav_menu과 같은 함수를 만들어야한다고 생각 합니다.

function MYTHEME_links__system_mynav_menu($variables) {
  return "TEST"; // Generate HTML here (<ul id="mynav">...)
}

그러나 영향을 미치지 않는 것 같습니다.

내가 무엇을 잘못하고 있지?



1
다른 질문은 고유 한 메뉴 ID를 추가하는 것에 관한 것이며이 질문은 더 일반적입니다.
kiamlaluno

stackoverflow에 대한 정확한 질문 : stackoverflow.com/questions/11935477/…
발톱

답변:


25

정렬되지 않은 목록을 테마로 지정하려면 theme_menu_tree ()를 호출해야합니다. 이것을 호출하기 위해 template.php를 편집 할 수 있습니다.

function THEMENAME_menu_tree__MENUNAME($variables){
  return '<ul class="your-custom-class" id="your-custom-id">' . $variables['tree'] . '</ul>';
}

그런 다음 링크 테마를 설정하려면 theme_menu_link ()를 호출하십시오.

function THEMENAME_menu_link__MENUNAME($variables) {
  $element = $variables['element'];
  $sub_menu = '';

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

이제 Drupal 7의 문제점은 사용자 정의 메뉴의 활성 트레일을 표시 할 때 큰 버그가 있다는 것입니다.


이슈 # 520106 참조 -동적 트레일을 동적으로 설정할 수 없음
이슈 # 942782-사용자 정의 메뉴는 활성 트레일을받지 않습니다

진정한 커스텀 메뉴를 원한다면 기본적으로 불운합니다. 이 문제는 drupal 커뮤니티에서 매우 오랫동안 존재하므로 곧 수정 될지 확실하지 않습니다. 도움이 될만한 PHP가 있는지 모르겠습니다. 메뉴 속성메뉴 블록 과 같은 기능적 편의를 돕기 위해 일부 대체 모듈을 사용할 수 있습니다 . 그들은 둘 다 Drupal 7의 cruddy 메뉴 시스템을 둘러 보는 데 도움이 될 수 있습니다.


2

테마의 template.php 안에서 Drupal 6에서 작업을 수행하는 방법이었습니다

function MYTHEME_links__system_mynav_menu($variables) {
  return "TEST"; // Generate HTML here (<ul id="mynav">...)
}

Drupal 7에서는 전화해야합니다

  function MYTHME_menu_link(array $variables) {

  }

MYTHEME_menu_link개별 링크 만 처리하는 것 같습니다. 에 연결할 수 없습니다 ul.
RoToRa

나는 그것을 조사하고 있습니다. 더 이상 할 수 있는지 모르겠습니다. Drupal 7을 사용하면 링크를 통해 더 많은 전력을 얻을 수 있지만 메뉴를 통해 더 적은 전력을 사용할 수 있습니다.
iStryker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.