쉼표로 구분 된 분류 용어 목록을 표시 하시겠습니까?


10

드루팔 7.

내 node.tpl.php에서 분류 용어 목록을 인쇄하려고합니다 (분류 체계를 "채널"이라고 함). 내가 사용하는 경우 :

<?php print render($content['field_channel']); ?>

분명히 작동하지만 인라인으로 가져 오는 가장 좋은 방법은 CSS를 사용하여 왼쪽으로 띄우는 것입니다. 쉼표로 구분하고 싶습니다. 어떤 아이디어?

고마워.

답변:


11

다음을 사용하여 필드 테마 시도 할 수 field.tpl.php또는 theme_field().

예를 들어 (사용 field.tpl.php) :

  1. field.tpl.php"modules / field / theme"에서 테마 디렉토리로 복사
  2. 해당 파일을 복사하고 이름을 바꿉니다. field--field-channel.tpl.php
  3. 원하는대로 파일을 편집하십시오.

이것이 작동하는 빠른 / 더러운 예제로 field--field-channel.tpl.php다음과 같이 보일 수 있습니다.

<div class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
  <?php if (!$label_hidden) : ?>
    <div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>:&nbsp;</div>
  <?php endif; ?>
  <div class="field-items"<?php print $content_attributes; ?>>
    <?php foreach ($items as $delta => $item) : ?>
      <div style="display:inline;" class="field-item <?php print $delta % 2 ? 'odd' : 'even'; ?>"<?php print $item_attributes[$delta]; ?>>
        <?php 
          print render($item);
          // Add comma if not last item
          if ($delta < (count($items) - 1)) {
            print ','; 
          }
        ?>
      </div>
    <?php endforeach; ?>
  </div>
</div>

.tpl 파일을 사용하여 여러 가지 방법으로이 작업을 수행 할 수 있지만 이는 하나의 옵션 일뿐입니다. 스타일 대신 클래스를 DIV에 추가하고 인라인 스타일을 사용하는 대신 스타일 시트를 변경하는 것이 좋습니다.


굉장히 완벽하게 작동했습니다. 그런 필드에서 템플릿을 사용할 수 있다는 것을 몰랐습니다. 아직도이 물건으로 배울 것이 많습니다. 다시 감사합니다.
Mike

tpl 파일을 사용하는 것은 약간 더 많은 리소스가 필요하며 선호하는 모드는 아래 hook_field 제안을 사용하는 것입니다.
shaneonabike

11

이제 텍스트 포맷터 모듈을 Drupal 7에서 사용할 수 있으며 사용자 정의 테마 작업없이이를 수행 할 수 있습니다.


텍스트 포맷터 모듈은 아마도 테마 레이어에서 뭉쳐야하는 위의 선택된 답변과 달리 지금이 이상적인 솔루션 일 것입니다.
JamesWilson

7

theme_field접근 방식을 사용하는 한 가지 방법이 있습니다 ( template.php파일에 추가 ).

/**
 * Implements theme_field()
 *
 * Make field items a comma separated unordered list
 */
function THEMENAME_field__NAME_OF_FIELD__NAME_OF_CONTENT_TYPE($variables) {
  $output = '';

  // Render the label, if it's not hidden.
  if (!$variables['label_hidden']) {
    $output .= '<div class="field-label"' . $variables['title_attributes'] . '>' . $variables['label'] . ':&nbsp;</div>';
  }

  // Render the items as a comma separated inline list
  $output .= '<ul class="field-items"' . $variables['content_attributes'] . '>';
  for ($i=0; $i < count($variables['items']); $i++) {
    $output .= '<li>'. drupal_render($variables['items'][$i]);
    $output .= ($i == count($variables['items'])-1) ? '</li>' : ', </li>';
  }
  $output .= '</ul>';

  return $output;
}

1
이것은 정말로 많은 도움이되었습니다! 또한 선호하는 방법은 tpl 파일입니다!
shaneonabike

4

CSS에서만 쉽게 할 수 있습니다.

.field-type-taxonomy-term-reference. 필드 항목 .field-item {
  디스플레이 : 인라인 블록;
  * 디스플레이 : 인라인;
  * 줌 : 1;
}
.field-type-taxonomy-term-reference.field-items.field-item : after {
  내용 : ",";
}
.field-type-taxonomy-term-reference.field-items.field-item : 마지막-자식 : 후 {
  내용 : "";
}

1
내가 사용했다하더라도 덕분에이 같은 공간을 위해 유니 코드를 탈출 content: ", \00a0": stackoverflow.com/a/5467676/724176
휴고


0
<?php
if ($node->taxonomy) {
    foreach($node->taxonomy as $term) {
        if ($term->vid == 3) { // the id of the vocabulary
            $my_terms[] = l(
                t($term->name),
                'taxonomy/term/' . $term->tid
            );
        }
    }
}

if ($my_terms) { ?>
    <div class="clear-block">
        <div class="terms">
            <?php print implode(", ", $my_terms); ?>
        </div>
    </div>
<?php } ?>

3
이것은 테마 시스템을 우회하여 하드 코딩 된 디스플레이 로직을 tpl 파일에 넣고 유지 관리 문제를 일으 킵니다.
Jeremy French

거의 같은 기능을하는 사이드 모듈을 사용하는 것이 더 낫습니까? 보다 유지 보수하기 쉬운 코드를 제공해 주시겠습니까?
Rootical V.

0

구분 기호 및 랩퍼에 대해서도 훨씬 쉬운 분류법 모듈러 모듈을 사용하십시오. http://drupal.org/project/taxonomy_formatter

프로젝트 페이지에서 자세한 내용 :

분류 항목에 대한 사용자 정의 포맷터를 제공하기 위해 작성된 작은 모듈입니다. 기본 포맷터는 둘 다 div로 싸인 용어를 출력합니다. 이 모듈은 요소 유형, 랩퍼 유형, 둘 다에 대한 클래스, 사용 된 구분 기호 및 페이지에 링크되는지 여부를 지정할 수있는 새 포맷터를 추가합니다. 이것은 훨씬 더 사용자 정의 가능한 레이아웃 옵션을 제공합니다.

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