>백엔드 개발 >PHP 튜토리얼 >Drupal 8에서 맞춤형 필드 포맷터 생성

Drupal 8에서 맞춤형 필드 포맷터 생성

Jennifer Aniston
Jennifer Aniston원래의
2025-02-18 08:42:11761검색

Drupal 8에서 맞춤형 필드 포맷터 생성 키 테이크 아웃

Drupal 8에서 사용자 정의 필드 포맷터 생성 SRC/Plugin/Field/FieldFormatter 디렉토리에서 기본 이미지 포름 attormatter 플러그인에서 확장되는 새로운 Formatter 클래스를 정의해야합니다. 새로운 Formatter 클래스는 ViewElements () 메소드를 무시하여 필드 데이터의 렌더 배열을 반환하여 Default Image_Formatter 테마를 사용자 정의로 바꾸어야합니다. 새로운 테마 인 Image_Title_Caption_formatter는 모듈의 .Module 파일에 생성되며 기본값 image_formatter 테마에서와 동일한 변수가 전달됩니다.
사용자 정의 필드 포맷터는 컨텐츠 유형의 "관리 디스플레이"탭을 통해 Drupal 8의 필드에 적용될 수 있으며 "형식"드롭 다운에서 사용자 정의 포맷터를 선택합니다.

개발 과정으로 인해 Drupal 8이 글을 쓰는 시점에 겪고 있으므로 코드의 일부가 구식이 될 수 있습니다. 예제 코드를 업데이트하고 최신 Drupal 8 릴리스에서 작동하도록하는이 저장소를 살펴보십시오. 주석이 달린 플러그인의 도입으로 Drupal 8에서 많은 것이 바뀌 었습니다. 우리는 코어를 확장하는 기능을 설명하고 발견하는 데 더 능률적 인 접근 방식이 있습니다. 다른 많은 구성 요소와 함께, 이전 필드 API (더 크고 통합 된 엔티티 API의 일부)는 이제 플러그인을 기반으로합니다.

    이 튜토리얼에서는 기존 필드 (이미지)에 대한 사용자 정의 필드 포맷터를 정의합니다. 우리가 달성하고자하는 것은 그 아래에 작은 캡션이있는 이미지를 표시 할 수 있도록하는 것입니다. 이 캡션은 이미지가 존재하는 경우 이미지에 할당 된 제목 값입니다.
  • 여기에 쓴 코드는이 저장소에서 image_title_caption 모듈로 찾을 수 있습니다. 하지만 최종 결과에 어떻게 도달 할 수 있는지 봅시다.
  • Drupal 모듈 하나의 파일만으로 새 사용자 정의 모듈 (image_title_caption)을 만들부터 시작하겠습니다. image_title_caption.info.yml :
  • 여기서 평범한 것은 없습니다. 원하는 경우 모듈을 이미 활성화 할 수도 있습니다.
  • 플러그인
  • Drupal 8에서는 필드 형성자 (필드 유형 및 위젯 자체)가 플러그인입니다. 코어는 코어 모듈에 의해 정의되거나 Drupalcorefieldpluginfieldformatter 네임 스페이스에서 찾을 수 있습니다. 사용자 정의 블록을 살펴본 이전 기사에서 본 것처럼 플러그인은 모듈의 SRC/ 플러그인/ 폴더 안에 들어갑니다. Field Formatters의 경우 SRC/Plugin/Field/Fieldformatter 디렉토리입니다.
  • 아래는 우리 자신의 Formatter 클래스를 볼 수 있습니다 : /> SRC/플러그인/필드/FieldFormatter/imageTitleCaption.php :
    name: Image title caption
    type: module
    description: Uses the image title field as a caption
    core: 8.x
    dependencies:
      - image
    이것은 우리의 플러그인입니다. 그것에 다른 것은 없습니다. 클래스 선언 위에는 플러그인이 발견되는 @fieldformatter 주석이 있습니다. 우리는 플러그인 ID (image_title_caption), 레이블 및이 Formatter와 함께 사용할 수있는 다양한 필드 유형을 지정합니다. 우리의 경우, 후자는 기본 이미지 필드 유형 만 포함하지만 사용자 정의 필드 유형조차 원한다면 더 많은 것을 지원할 수 있습니다. 해당 배열에 들어가는 값은 플러그인 ID이므로 이미지 필드 유형 플러그인을 보면 ID가 이미지임을 알 수 있습니다. 클래스는 Core Image 모듈로 정의 된 기본 ImageFormatter 플러그인에서 확장되기 때문에 간단 해 보입니다. 우리의 목적을 위해, 우리가 재정의해야 할 것은 필드 데이터의 렌더링 배열을 반환하는 ViewElements () 메소드 만 있습니다. 후자는 $ 항목 목록에서 찾을 수 있으며 렌더링에 사용 및 준비 할 수 있습니다.

    이 방법에서 우리가하는 첫 번째 일은 항목의 상위 클래스 메소드를 호출하고이를 변수에 저장하는 것입니다. 그것은 이미 이미지가 평소처럼 렌더링되도록 준비합니다.

    기본적으로 ImageFormatter 플러그인 (부모)은 렌더 배열 내부의 image_formatter 테마를 사용하여 이미지 필드 값을 출력합니다. 우리가하는 일은 각 항목에 대해이 테마를 우리 자신의 자체로 바꾸는 것입니다 : image_title_caption_formatter. 그런 다음 부모와 마찬가지로 요소 (렌더 배열)를 반환합니다.

    당신은 Drupal 8에서 이것을 많이 알게 될 것입니다 : 우리는 우리가 확장하는 부모 수업에서해야 할 일에 대해 아주 좋은 표시를 얻습니다. 그리고 당신이 나에게 묻는다면, 그것은 마법의 후크 나 기능이 무엇을하는지 알아내는 것보다 훨씬 낫습니다.

    테마 <_> 위에서 지정한 image_title_caption_formatter 테마는 지금까지 가상이므로 만들어야합니다. 모듈의 .Module 파일 내부에서는 hook_theme을 구현해야합니다 :

    image_title_caption.module :

    이것은 Drupal 7과 매우 유사하기 때문에 익숙해 보일 것입니다.이 테마로 전달하는 변수를 확인하십시오. 기본 image_formatter 테마를 무시하려면 여기에도 동일한 변수가 전달되어야합니다. 또한 image_formatter 테마가 전처리되었으므로 테마에 대한 전처리기도 만들어야합니다.

    이 사전 처리기에서 우리는 두 가지 조치를 수행합니다 :

    우리는 템플릿 파일에 전달 된 변수가 Default Image_Formatter 테마 전처리 기에 의해 먼저 전처리되었는지 확인합니다. 이것은 모든 변수가 정확히 동일하고 이미지가 평소와 같이 표시되는 것입니다. 우리는 이미지 제목의 위생 값을 포함 할 캡션이라는 새로운 변수를 만듭니다.

    소아화의 경우, 우리는 Helper String 클래스를 정적으로 사용합니다. 우리는 여전히 .module 파일 내부에 있으므로 주입 할 수는 없지만 파일 상단에서

    를 사용해야합니다.
    name: Image title caption
    type: module
    description: Uses the image title field as a caption
    core: 8.x
    dependencies:
      - image

    템플릿 마지막으로, 우리는 새로운 테마에 대한 템플릿 파일을 만들어야합니다. /> 템플릿/이미지 타이틀-캡션 -formatter.html.twig :

    Drupal 7과 유사 하게이 파일의 이름은 테마 이름을 반영하므로 중요합니다. 내용은 바닥에 인쇄 된 캡션을 제외하고 image_formatter 테마에서 사용하는 템플릿과 거의 동일합니다.

    > 작동합니까? 이제 코드를 작성 했으므로 활성화 된 후 코드를 변경 한 경우 모듈을 활성화하고 모든 캐시를 지워야합니다. 이제 테스트 할 시간입니다.

    예를 들어 admin/struction/types/manage/article/display의 기사 내용 유형 필드 디스플레이 설정으로 이동하십시오. 이미지 필드의 경우 형식 제목으로 제목 형식에서 캡션을 사용하여 이미지를 선택할 수 있어야합니다. 양식을 저장하고 관리/구조/유형/관리/기사/필드/Node.article.field_image로 이동하여 이미지 필드 제목이 활성화되어 있는지 확인하십시오.

    마지막으로 기사를 편집하고 이미지를 업로드하고 제목을 지정할 수 있습니다. 이 제목은 계속해서 행동하지만, 또한 이미지 아래에 캡션으로 표시됩니다. 물론, 당신은 여전히 ​​당신이 원하는대로 스타일을 지정할 수 있습니다.

    <span><span><?php
    </span></span><span>
    </span><span><span>/**
    </span></span><span><span> * <span>@file
    </span></span></span><span><span> * Contains \Drupal\image_title_caption\Plugin\Field\FieldFormatter\ImageTitleCaption.
    </span></span><span><span> */
    </span></span><span>
    </span><span><span>namespace Drupal<span>\image_title_caption\Plugin\Field\FieldFormatter</span>;
    </span></span><span>
    </span><span><span>use Drupal<span>\Core\Field\FieldItemListInterface</span>;
    </span></span><span><span>use Drupal<span>\image\Plugin\Field\FieldFormatter\ImageFormatter</span>;
    </span></span><span>
    </span><span><span>/**
    </span></span><span><span> * Plugin implementation of the 'image_title_caption' formatter.
    </span></span><span><span> *
    </span></span><span><span> * @FieldFormatter(
    </span></span><span><span> *   id = "image_title_caption",
    </span></span><span><span> *   label = @Translation("Image with caption from title"),
    </span></span><span><span> *   field_types = <span>{
    </span></span></span><span><span> *     "image"
    </span></span><span><span> *   <span>}
    </span></span></span><span><span> * )
    </span></span><span><span> */
    </span></span><span><span>class ImageTitleCaption extends ImageFormatter {
    </span></span><span>
    </span><span>  <span>/**
    </span></span><span><span>   * <span>{@inheritdoc}
    </span></span></span><span><span>   */
    </span></span><span>  <span>public function viewElements(FieldItemListInterface $items) {
    </span></span><span>    <span>$elements = <span>parent::</span>viewElements($items);
    </span></span><span>    <span>foreach ($elements as &$element) {
    </span></span><span>      <span>$element['#theme'] = 'image_title_caption_formatter';
    </span></span><span>    <span>}
    </span></span><span>
    </span><span>    <span>return $elements;
    </span></span><span>  <span>}
    </span></span><span>
    </span><span><span>}</span></span>
    결론 이 기사에서는 Drupal 8에서 필드 포맷터를 만들고 기본 동작을 확장하는 것이 얼마나 쉬운 지 보았습니다.이 플러그인의 ViewElements ()를 재정의하는 데만 접촉했지만 추가 사용자 정의를 위해 훨씬 더 많은 작업을 수행 할 수 있습니다. 것들. 또한 ImageFormatter를 확장 할 필요는 없습니다. 기존 플러그인이 많이 있습니다. 또한 새로운 필드 유형과 위젯도 쉽게 만들 수 있습니다. 비슷한 프로세스이지만 스키마 정보를 고려하고 다른 주석 클래스를 사용하고 더 많은 코드를 작성해야합니다. 그러나 요점은 당신이 그렇게하는 데 매우 유연하다는 것입니다.

    Drupal 8

    에서 사용자 정의 필드 포맷터 생성에 대해 자주 묻는 질문 Drupal 8에서 사용자 정의 필드 포맷터를 만드는 방법?

    Drupal 8에서 사용자 정의 필드 포맷터를 만드는 데 몇 단계가 포함됩니다. 먼저 사용자 정의 모듈이없는 경우 사용자 정의 모듈을 만들어야합니다. 그런 다음 사용자 정의 모듈에서 src/plugin/field/fieldformatter 디렉토리에 새 파일을 만듭니다. 파일은 포함 할 클래스에 따라 명명되어야합니다. 이 파일 내에서는 FormatterBase 클래스를 확장 해야하는 사용자 정의 필드 포맷터 클래스를 정의합니다. 필드 값에 대한 렌더 배열을 생성하는 ViewElements ()를 포함한 여러 방법을 구현해야합니다. Drupal 8의 @fieldformatter 주석의 목적은 무엇입니까?

    Drupal 8의 @fieldformatter 주석은 필드 포맷터를 정의하는 데 사용됩니다. ID, 레이블 및 Field_types와 같은 속성이 포함됩니다. ID는 Formatter의 고유 식별자이며, 레이블은 사람이 읽을 수있는 이름이며 Field_types는 Formatter가 지원하는 필드 유형 기계 이름입니다.

    내 사용자 정의 필드 포맷터를 Drupal 8?

    의 필드는 Drupal 8의 필드에 사용자 정의 필드 포맷터를 적용하려면 컨텐츠 유형, 분류 용어 또는 기타 엔터티 유형의 "관리"탭으로 이동해야합니다. 필드. 목록에서 필드를 찾아 "형식"드롭 다운에서 사용자 정의 포맷터를 선택하십시오. 그런 다음 "업데이트"버튼을 클릭하고 변경 사항을 저장합니다.

    Drupal 8에서 사용자 정의 필드 포맷터의 출력을 어떻게 제어 할 수 있습니까?

    Drupal 8에서 사용자 정의 필드 포맷터의 출력은 IS입니다. Formatter 클래스의 ViewElements () 메소드에 의해 제어됩니다. 이 메소드는 필드 값에 대한 렌더 배열을 반환해야합니다. Drupal의 테마 시스템을 사용하여 출력을 추가로 사용자 정의 할 수 있습니다.

    Drupal 8의 여러 필드 유형에 맞춤형 필드 포맷터를 사용할 수 있습니까? Drupal 8의 필드 유형. Formatter 클래스의 @fieldformatter 주석에서 Field_types 속성에 필드 유형 기계 이름을 지정할 수 있습니다.

    내 사용자 정의 필드 Formatter에 대한 설정 양식을 작성하는 방법 DRUPAL 8?

    DRUPAL 8에서 사용자 정의 필드 포맷터에 대한 설정 양식을 작성하려면 Formatter 클래스에서 SettingSform () 및 SettingSummary () 메소드를 구현해야합니다. settingsform () 메소드는 설정에 대한 양식 배열을 반환해야하며 settingssummary () 메소드는 설정에 대한 요약 줄 배열을 반환해야합니다.

    Drupal에 이미지를 표시하기 위해 사용자 정의 필드 포맷터를 사용하는 방법 8?

    사용자 정의 필드 포맷터를 사용하여 Drupal 8에 이미지를 표시하려면 Formatter 클래스가 Formatterbase 대신 ImageFormatterBase 클래스를 확장해야합니다. 이미지 필드 값에 대한 렌더 배열을 생성하려면 ViewElements () 메소드를 구현해야합니다.

    Drupal 8에서 사용자 정의 필드 유형에 대한 사용자 정의 필드 포맷터를 만들 수 있습니까? , Drupal 8에서 사용자 정의 필드 유형에 대한 사용자 정의 필드 포맷터를 만들 수 있습니다. Formatter 클래스의 @fieldformatter 주석에서 Field_types 속성에서 사용자 정의 필드 유형의 기계 이름을 지정할 수 있습니다. 사용자 정의 필드 포맷터를 사용하여 Drupal 8에 링크를 표시 할 수 있습니까?

    사용자 정의 필드 포맷터를 사용하여 Drupal 8에 링크를 표시하려면 Formatter 클래스가 Formatterbase 대신 Linkformatter 클래스를 확장해야합니다. 링크 필드 값에 대한 렌더 배열을 생성하려면 ViewElements () 메소드를 구현해야합니다. Drupal 8의 다중 값 필드에 대한 사용자 정의 필드 포맷터를 어떻게 만들 수 있습니까?

    Drupal 8의 다중 값 필드에 대한 사용자 정의 필드 포맷터를 만들려면 Formatter 클래스가 Formatterbase를 확장해야합니다. ViewElements () 메소드를 클래스하고 구현하십시오. 이 방법은 필드에 여러 값이있을 수 있음을 고려하여 필드 값의 렌더 배열을 반환해야합니다.

위 내용은 Drupal 8에서 맞춤형 필드 포맷터 생성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.