it-swarm-ko.tech

메인 메뉴의 <a> </a> 태그 안에 <span> </ span> 태그를 삽입하는 방법

Stack Overflow 에서이 질문을 정확하게했지만 여기에서 묻는 것이 더 합리적입니다.

태그 사이에 텍스트를 배치하고 스타일을 지정하여 표시하지 않도록하려고합니다.

Template.php 파일에 다음 함수를 추가했지만 프런트 엔드에서 차이를 볼 수 없습니다. 스팬은 나타나지 않습니다. (캐시를 지 웠습니다.)

올바른 기능을 사용하고 있습니까? 내가 뭘 잘못하고 있죠?

function my_theme_link($variables) {
  return '<a href="' . check_plain(url($variables['path'], $variables['options'])) . '"' . drupal_attributes($variables['options']['attributes']) . '><span>' . ($variables['options']['html'] ? $variables['text'] : check_plain($variables['text'])) . '</span></a>';
} 
4
Martin Duys

앵커 태그를 만들고 url()의 결과를 check_plain()로 전달하는 대신 l () 을 호출하면 태그가 만들어집니다.
문자열로 전달할 때 $options['html']TRUE (여기서 $optionsl()_에 전달 된 마지막 매개 변수)로 설정해야합니다. l()의 첫 번째 인수는 HTML 태그를 포함합니다. 기본적으로 함수는 $options['html']FALSE 인 것으로 가정합니다.

8
kiamlaluno

http://drupal.org/node/45774 / http://drupal.org/node/988842 을 살펴보면 개발/테마 개발자 모듈이 유용합니다.

귀하의 기능은 일반적으로 링크 용이며 모든 메뉴에만 국한되지 않는다고 생각합니다.

function THEMENAME_links__system_MENUNAME_menu($variables) {
  $output = '';
  foreach ($variables['links'] as $link) {
    $output .= l('<span>'. check_plain($link['title']) .'</span>', $link['href'], $link);
  }
  return $output;
}

편집 : 포함 된 범위.

4
WestieUK

많은 검색 후이 문제에 대한 해결책을 찾았습니다. 그런데 이것은 특정 메뉴의 링크 출력을 사용자 정의하는 데 효과적입니다.

기본 또는 기본 메뉴 링크를 사용자 정의하는 것이 모든 테마에 필수적이라고 말하고 싶습니다. 왜 내가 Drupal 프로그래머가 그렇게 어렵게 만들 었는지 생각할 수있는 유일한 이유는 전문가입니다) Drupal 그들은 일을 계속할 수 있습니다!

Theme_link 함수를 사용하는 솔루션을 보았습니다. 모든 링크의 출력이 변경되어 사이트 레이아웃이 손상되기 때문에 나쁜 생각입니다.

그래서 내 접근 방식은 theme_menu_link 함수를 재정의하는 것입니다. 원하는 특정 메뉴에서만 재정의를 사용하는 조건을 추가합니다. 이 예에서는 기본 링크를 선택했습니다. 테마를 설정하려는 메뉴의 이름을 알기 위해서는 dsm ($ variables)을 넣고 Devel 모듈을 사용해야합니다.

function yourtheme_menu_link(array $variables) {

  $element = $variables['element'];
  $sub_menu = '';

// Replace 'menu_link__menu_block__1' with the name of the menu you want to theme.
if ($element['#theme']['0'] == 'menu_link__menu_block__1') {
  if ($element['#below']) {
    $sub_menu = drupal_render($element['#below']);
  }

  $title = $element['#title'];

// I put the span tags in the title.
  $element['#title'] = '<span class="yourclass1"></span><span class="yourclass2">' . $title . '</span><span class="yourclass3"></span>';
// I tell the l() function to keep the HTML tags.
  $element['#localized_options'] += array(
    'attributes' => array(), 
    'html' => TRUE,
  );
  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}
// The function renders the links from all the other menus without modification.
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";
}
2
Taesto

이것은 Taerno가 보여주는 코드와 동일한 결과를 출력하며 Drupal 7.12)에서 잘 작동합니다.

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

  if ($element['#below']) {
    $sub_menu = drupal_render($element['#below']);
  }

  $element['#localized_options']['html'] = TRUE;
  $linktext = '<span class="your_class">' . $element['#title'] . '</span>';

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

다음 코드를 추가 할 수 있습니다. 여기서 "menu_link__menu_block__1"은 메뉴 이름입니다.

if ($element['#theme']['0'] == 'menu_link__menu_block__1') {

}

메뉴에 $element['#theme']['0']를 인쇄하여 메뉴 이름을 찾았습니다.

부모 링크에만 범위를 추가하려고하므로 그렇게하면 게시 할 것입니다.

2
Original Scott

추가 스팬이 필요했던 대부분의 경우는 이제 CSS로만 해결할 수 있습니다.

li {
  position: relative;
  padding-left: 25px;
}

li:before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  width: 20px;
  height: 20px;
  background: url('../images/icons.png') no-repeat;
  background-position: 0 0;
}
1
Hans Rossel

Theme Developer 모듈에 관심이있을 수 있습니다. Drupal 페이지의 요소를 클릭하여 어떤 테마 함수/템플릿을 생성했는지, 어떤 인수가 전달되었는지, 어떤 대안을 사용할 수 있는지 등을 확인할 수 있습니다.

1
thsutton