기존 필드에 대한 추가 필드 포맷터를 작성하는 방법


9

기존 필드 유형에 대한 새 필드 포맷터를 작성하고 싶습니다. 기존 포맷터를 교체하고 싶지 않지만 새로운 옵션을 제공합니다.

아니면 theme_preprocess_field ()를 사용하여 사소한 변경을 수행하는 것이 더 낫습니까? 그러나 이것은 유지 관리하기가 더 어려워서 콘텐츠 편집기 옵션을 열어 놓고 (및 GUI에서) 유지하고 싶습니다.

누군가 이것을 수행하는 올바른 방법의 예를 알려줄 수 있습니까?

답변:


13

개인적으로 나는 포매터가 더 나은 해결책이라고 말하고 싶습니다.

구현해야 할 후크는 두 가지뿐입니다.

예를 들면 다음과 같습니다.

function MYMODULE_field_formatter_info() {
  return array(
    'my_formatter' => array(
      'label' => t('My formatter'),
      // The important bit...
      'field types' => array('field_type'),
    ),
  );
}

function MYMODULE_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $settings = $display['settings'];
  $element = array();

  if ($display['type'] == 'my_formatter') {
    foreach ($items as $delta => $item) {
      $element[$delta] = array('#markup' => $item['value']);
    }
  }

  return $element;
}

좀 더 심도있게 살펴 보려면 예제 모듈을 다운로드하고 field_example을 살펴보십시오. 코드와 설명서가 많이 있습니다.


hook_field_formatter_settings_form 및 hook_field_formatter_settings_summary를 구현하여 사용자에게 필드 표시 방법을 변경할 수있는 옵션을 제공 할 수도 있습니다.
ndvo

2

사용자 정의 모듈을 개발하거나 "사용자 정의 포맷터"모듈을 사용할 수 있습니다.

첫 번째 경우 일부 드루팔 7 개 후크를 구현하는 모듈을 작성해야 : hook_field_formatter_info(), hook_field_formatter_view()hook_theme(). hook_field_formatter_info()포맷터 유형을 선언하는 데 사용됩니다. 이 함수는 포맷터 설명이있는 배열을 리턴합니다. 키는 포맷터 이름이며 레이블 및 필드 유형이있는 배열을 갖습니다. 템플릿 을 구현 hook_field_formatter_view()하고 hook_theme()정의하려면 구현해야합니다 . 문서 포맷터 API에 대한 자세한 내용은 문서를 참조하십시오 .

두 번째 경우에는 모든 필드에 대해 사용자 정의 디스플레이 포맷터를 작성할 수있는 사용자 정의 포맷터 모듈을 사용할 수 있습니다. 이 모듈을 사용하면 토큰이있는 사용자 정의 PHP 코드 또는 HTML 코드를 사용하여 포맷터를 작성할 수 있습니다.

사용하기 쉽고 구성하기 쉬운 두 번째 방법을 제안합니다.

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