키 포인트
Drupal의 엔티티는 데이터를 구성하는 강력한 방법이며 특정 유형의 정보를 나타내도록 사용자 정의 할 수 있습니다. 이 튜토리얼은 제목, 설명 및 마감일과 같은 속성을 포함하는 프로젝트라는 커스텀 엔티티 유형을 만드는 방법을 보여줍니다.
새 엔티티 유형을 만들려면 스키마 정의가 선언되어야하며, 이는 데이터베이스 엔티티 데이터 테이블을 생성합니다. 이 튜토리얼은 4 개의 열 (ID, 이름, 설명 및 마감일)이있는 "demo_projects"테이블을 작성하기위한 코드 예제를 제공합니다.
Entity API 모듈은 귀하의 사이트에서 활성화되어 있고 사용자 정의 모듈의 종속성으로 설정되어 있어야하며, 이는 Drupal Core가 부족한 많은 엔티티 처리 기능을 제공합니다. 여기에는 새로운 엔티티 작성, 데이터베이스에 저장 및 표시가 포함됩니다.
이 자습서는 또한 기본 EntyApicOntroller 클래스의 BuildContent () 메소드를 엔터티를 표시하여 Entity_View () 도우미 기능을 통해 엔티티 목록을 작성하는 방법을 설명합니다. 튜토리얼의 두 번째 부분은 개별 프로젝트 엔티티를 표시하는 페이지 생성을 소개하여 UI를 통해 전계를 가능하게하고 쿼리 및 목록 디스플레이보기에 노출시킵니다.
Drupal Entities는 데이터를 구성하는 좋은 방법입니다. 노드, 분류 용어, 댓글 또는 사용자에 익숙하다면 Drupal 7 이후 엔티티임을 알고 있어야합니다. 그들에 대한 또 다른 중요한 측면은 필드 API를 통해 전류 될 수 있다는 것입니다.
이 튜토리얼에서는 자신의 커스텀 엔티티 유형을 정의하고 시작하는 방법을 보여 드리겠습니다. 왜 누구든지 노드를 사용하는 대신 이것을하고 싶어합니까? 훌륭하지만 노드는 때때로 지나치게 복잡 할 수 있습니다. 개정이나 의견과 같은 많은 기능이 필요하지 않을 수 있습니다.
이 자습서에서는 프로젝트 (제목, 설명 및 마감일)에 대한 간단한 정보를 나타내기 위해 "Project"라는 고유 한 사용자 정의 엔티티 유형을 정의합니다. 그런 다음이 유형의 엔티티를 사용하는 것에 대해 조금 배울 것입니다.
계속 학습을 위해 기본 사용자 정의 모듈을 작성하는 방법을 알고 있다고 가정합니다 (내 모듈은 데모라고합니다). 이 주제에 대한 훌륭한 자습서를 여기에서 찾을 수 있습니다. .info 파일을 계속 작성하고 빈 .Module 및 .install 파일을 만듭니다. 또한이 튜토리얼의 모든 소스 코드를 얻을 수있는 git 저장소를 설정합니다 (각 섹션마다 하나의 지점, 두 섹션이 게시됩니다).
또한 사이트에서 엔티티 API Contrib 모듈을 활성화하고 사용자 정의 모듈의 종속성으로 설정해야합니다. 엔티티 API 모듈은 Drupal Core가 부족한 많은 기능을 제공하기 때문에 엔티티를 처리 할 때 매우 강력합니다.
우리 자신의 드 루 팔 엔티티 유형 정의
새 엔티티 유형 생성 먼저 스키마 정의를 선언해야합니다. 즉, 엔티티 데이터 데이터베이스 테이블을 생성하는 코드를 작성하십시오. 내 Demo.install 파일에는 다음 코드가 있습니다.
/**
* Implements hook_schema().
*/
function demo_schema() {
$schema = array();
$schema['demo_projects'] = array(
'description' => 'The base table for the Project entity',
'fields' => array(
'id' => array(
'description' => 'Primary key of the Project entity',
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'name' => array(
'description' => 'Project name.',
'type' => 'varchar',
'length' => 255,
'not null' => FALSE,
),
'description' => array(
'description' => 'Project description.',
'type' => 'text',
'size' => 'big',
'not null' => FALSE,
'default' => NULL
),
'deadline' => array(
'description' => 'Project deadline.',
'type' => 'int',
'length' => 11,
'not null' => FALSE,
),
),
'primary key' => array('id'),
);
return $schema;
} 로그인 후 복사
로그인 후 복사
이것은 hook_schema ()의 간단한 구현입니다. demo_projects 테이블을 만듭니다. 큰 문제가 아닙니다.
다음은 hook_entity_info ()를 구현해야합니다. 이 후크에서 많은 옵션을 지정할 수 있지만 여기에 가장 기본적이고 필요한 옵션이 있습니다 (이것은 Demo.Module 파일에 있습니다) : <🎜 🎜>.
이 후크를 사용하면 엔티티 머신 이름을 나타내는 $ info 배열의 새 키를 반환합니다. 이 배열에서는 옵션을 지정합니다 (이 자습서에서 더 많은 옵션을 추가 할 것입니다). 이제 우리는 태그 (엔티티 유형의 읽기 가능한 이름), 엔티티 데이터를 저장하는 기본 테이블, 엔티티 식별자의 속성 역할을하는 엔티티 키 및 엔티티 유형을 지정하는 모듈을 사용하여 사용됩니다. 마지막은 필수는 아니지만 권장됩니다.
<,> 이런 식으로, 우리는 자체 기본 엔티티 유형을 Drupal에 등록합니다. 작동하는지 테스트하려면 모듈을 처음으로 활성화하고 데이터베이스에서 테이블이 생성되었는지 확인하십시오. 그런 다음 사용할 것이 있도록 몇 줄로 채우십시오.
마지막으로, hook_menu ()를 사용하여 Drupal을 사용하여 경로 (테스트를위한 경로에 대해)를 등록하고 다음을 콜백 함수에 붙여 넣습니다.
/**
* Implements hook_entity_info().
*/
function demo_entity_info() {
$info = array();
$info['project'] = array(
'label' => t('Project'),
'base table' => 'demo_projects',
'entity keys' => array(
'id' => 'id',
'label' => 'name',
),
'module' => 'demo',
'entity class' => 'Entity',
'controller class' => 'ProjectEntityController',
);
return $info;
} 로그인 후 복사
먼저, 우리는 entity_load () 함수를 사용하여 ID 1과 2가있는 프로젝트 엔티티를로드 한 다음 DEVEL DPM () 함수를 사용하여 (따라서 사이트에서 테스트를 위해 DEVEL이 활성화되어 있는지 확인)를 사용합니다. 스크린 우수합니다. 페이지의 콜백 함수가 무언가를 반환해야한다는 것을 잊지 마십시오. 그렇지 않으면 구축되지 않습니다.
이제이 페이지로 이동하면 Krumo의 데이터베이스에있는 2 개의 엔티티에 대한 데이터가 표시됩니다.
<,> 또는 EntityFieldQuery 클래스를 사용하여 원하는 속성 (ID가 아닌)을 기반으로 새 엔티티를 쿼리 할 수 있습니다. 이 작동 방식에 대한 자세한 내용은이 itepoint 튜토리얼을 확인하여 시작하는 데 도움이됩니다.
엔티티 클래스 및 컨트롤러 <🎜 🎜>
불행히도, Drupal Core는 엔티티를 처리하기 위해 너무 많은 도우미 기능을 제공하지 않습니다 (Entity_load ()는 거의 독특합니다). 그러나 엔티티 API 모듈 이이 격차를 메 웁니다.
기능을 사용하려면 이전에 선언 한 엔티티 정보를 변경하고 엔티티를 처리하는 데 사용할 수있는 PHP 클래스를 지정해야합니다. 이제 hook_entity_info () 구현에 입력 된 프로젝트 어레이에 두 개의 키를 추가 할 것입니다 : <🎜 🎜>
위에서 언급 한 코드에는 이미 INSERT INTO `demo_projects` (`id`, `name`, `description`, `deadline`)
VALUES
(1, 'Summer House', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397501105),
(2, 'Winter House', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397501132); 로그인 후 복사
<🎜 🎜>가 포함되어 있습니다
EntityApicOntroller 클래스 (모듈 ENTITY.CONTROLLER.INC 파일에 위치)는 처리 엔티티에 대한 합리적인 기본값을 제공합니다. 기본 Drupal Core DrupaldEfaultentityController 클래스를 확장하고 CRUD 작업을 수행하는 (다른 많은 것들 중에서도) 책임이 있습니다.
<인지> 두 클래스 모두 사용자 정의 모듈에서 확장하여 기능을 조정할 수 있습니다 (예 : 쿼리,로드 또는 엔티티 표시). 나중에이 작업을 수행하는 방법을 볼 것입니다.
그러나 먼저, 새로운 엔티티를 저장하는 방법을 보여 드리고 싶습니다. 현재 데이터베이스에는 ID 1과 2가있는 2 개의 레코드가 있습니다. 위의 테스트 페이지 콜백 함수에 쓴 코드를 조정하여 ID 3이없는 새 엔티티를 만들고 싶습니다. 다음과 같이 보일 수 있습니다
보시다시피, 이제 우리는 3 개의 프로젝트 엔티티를로드하고 세 번째 엔티티가 있는지 확인하려고합니다. 존재하지 않으면 엔티티 API가 제공하는 entity_create () 도우미 함수를 사용하고 속성을 임의의 값으로 설정 한 다음 엔티티의 Save () 메소드를 사용하여 데이터베이스에 지속됩니다. 이 메소드는 엔티티 클래스에서 제공하며 그 작업은 위에서 정의한 컨트롤러 클래스에서 Save () 메소드를 호출하는 것입니다. 이 방법은 엔티티를 지속하는 데 필요한 논리를 수행합니다. 그러나이 모든 것은 무대 뒤에서 발생합니다. 우리는 그것에 대해 걱정할 필요가 없습니다.
페이지를 다시로드하면 2 개의 프로젝트 엔티티 만 반환해야하지만 두 번째로는 3이 있어야합니다. /**
* Implements hook_schema().
*/
function demo_schema() {
$schema = array();
$schema['demo_projects'] = array(
'description' => 'The base table for the Project entity',
'fields' => array(
'id' => array(
'description' => 'Primary key of the Project entity',
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'name' => array(
'description' => 'Project name.',
'type' => 'varchar',
'length' => 255,
'not null' => FALSE,
),
'description' => array(
'description' => 'Project description.',
'type' => 'text',
'size' => 'big',
'not null' => FALSE,
'default' => NULL
),
'deadline' => array(
'description' => 'Project deadline.',
'type' => 'int',
'length' => 11,
'not null' => FALSE,
),
),
'primary key' => array('id'),
);
return $schema;
} 로그인 후 복사
로그인 후 복사
는 엔티티 클래스 를 커버합니다
이 튜토리얼 의이 부분에서 마지막으로 보여주고 싶은 것은 엔티티를 표시하는 방법입니다. 이를 위해 사용중인 페이지 콜백 기능을 고수하여 실제 목록으로 렌더링합니다.
먼저, 기본 EntyApicOntroller 클래스의 buildContent () 메소드를 무시해야합니다. 그 이유는 컨트롤러가 데이터에 대해 가정 할 수 없으므로 표시 방법에 대한 정보를 제공해야합니다. 먼저, 이전 클래스를 확장하는 컨트롤러 클래스를 선언 해 봅시다 :
클래스 이름 ProjectentityController를 선택했습니다. hook_entity_info () 구현에서 컨트롤러 클래스 키에 대해 설정 한 값을 교체해야합니다. 잊지 마세요.
이 클래스에서는 원래 클래스에서 메소드 이름을 복사하여 부모 클래스가 반환하는 것을 반환 할 수 있습니다.
이 클래스에서는 원래 클래스에서 메소드 이름을 복사하여 상위 클래스가 반환되는 것을 반환 할 수 있습니다. 우리는 기본적으로 두 개의 새로운 항목을 배열에 추가했습니다. 첫 번째는 설명을 로 랩핑하고 두 번째는 단락 레이블 사이의 형식 날짜를 출력합니다. 이것은 기본 드 루팔 테마입니다. 여기서 무슨 일이 일어나고 있는지 이해하지 못하면 검토하십시오. 그러나 누락 된 프로젝트 이름을 알 수 있습니다. Drupal은 hook_entity_info ()가 구현 한 엔티티 키에서 태그로 지정하기 때문에 자동으로 렌더링합니다. 마지막 단계는 페이지 콜백 함수로 이동하여 엔티티를 표시하는 것입니다. 빠른 방법 (데모 목적으로 만) :
이전과 마찬가지로 먼저 해당 ID로 엔티티를로드합니다. 그런 다음 Entity_View () 도우미 함수를 통해 실행합니다. 결국 방금 덮어 쓴 BuildContent () 메소드를 호출합니다. 이 함수는 각 엔티티의 렌더링 된 배열 목록을 반환합니다. 우리는 각각을 렌더링하고 결과를 $ 출력 배열에 저장 한 다음 그것을 연결하고 반환합니다.
페이지를 새로 고칠 수 있으며로드 한 모든 엔티티 목록이 표시됩니다. 변경 사항이 보이도록 캐시가 지워 있는지 확인하십시오.
결론
이 튜토리얼에서 우리는 코드의 엔티티 유형을 정의하여 Drupal의 엔티티에 대해 배우기 시작합니다. 우리는 그들이 나타내는 데이터에 대한 스키마 정의를 작성하는 방법과 Drupal에 등록하는 방법을 배웠습니다. 그런 다음 엔티티 API Contrib 모듈을 사용하여 엔티티를 객체 지향적 인 방식으로 처리하는 힘을 볼 수 있습니다.
이 튜토리얼의 두 번째 부분에서는 세 가지 주요 측면을 살펴 보겠습니다. 먼저 개별 프로젝트 엔티티를 표시하고 프로젝트 관리를위한 관리 인터페이스를 시작하기위한 일부 페이지를 만들 것입니다. 둘째, 우리는 UI를 통해 그것을 수비 할 수있게 할 것입니다. 셋째, 적절한 쿼리 및 목록 디스플레이를 수행 할 수 있도록 조회수에 노출됩니다. 계속 지켜봐!
Drupal에서 맞춤형 엔티티를 구축 할 때 FAQ
Drupal Custom Entity를 만들기위한 전제 조건은 무엇입니까?
Drupal Custom Entities를 만들기 전에 Drupal의 엔티티 API에 대한 기본적인 이해가 있어야합니다. 또한 PHP 개념 및 객체 지향 프로그래밍의 개념에 익숙해야합니다. 또한 Drupal 개발 환경을 설정해야합니다. 여기에는 로컬 컴퓨터 또는 서버에 Drupal을 설치하고 구성하는 것이 포함됩니다.
Drupal에 번들이있는 사용자 정의 컨텐츠 엔티티를 만드는 방법은 무엇입니까?
Drupal에 번들이있는 사용자 정의 컨텐츠 엔티티 작성에는 여러 단계가 포함됩니다. 먼저, 엔티티와 해당 속성을 사용자 정의 모듈에서 정의해야합니다. 그런 다음 엔티티를 추가하고 편집하려면 양식을 작성해야합니다. 그런 다음 엔터티 운영의 경로를 정의해야합니다. 마지막으로 엔티티를 표시하려면 뷰 빌더를 만들어야합니다.
Drupal의 컨텐츠 엔티티와 구성 엔티티의 차이점은 무엇입니까?
Drupal의 컨텐츠 엔티티는 사용자가 작성, 편집 및 삭제할 수있는 컨텐츠 조각입니다. 예로는 노드, 사용자 및 댓글이 있습니다. 반면, 구성 엔티티는 데이터베이스에 저장된 구성 조각이며 코드로 내보낼 수 있습니다. 예로는 뷰, 이미지 스타일 및 사용자 역할이 있습니다.
Drupal 8에서 컨텐츠 엔티티 유형을 만드는 방법은 무엇입니까?
Drupal 8에서 컨텐츠 엔티티 유형 생성에는 사용자 정의 모듈에서 엔티티와 해당 속성을 정의하는 것이 포함됩니다. 또한 엔티티를 추가하고 편집 할 수있는 양식을 작성하고 엔티티 작업의 경로를 정의하고 뷰 빌더를 만들어 엔티티를 표시해야합니다.
엔티티 API 모듈을 사용하여 Drupal에서 사용자 정의 엔티티를 만들 수 있습니까?
예, 엔티티 API 모듈을 사용하여 Drupal에서 사용자 정의 엔티티를 만들 수 있습니다. 이 모듈은 엔티티와 해당 속성을 처리하는 통일 된 방법을 제공합니다. 또한 제작, 읽기, 업데이트 및 삭제와 같은 엔티티에서 작업을 수행하기위한 API를 제공합니다.
Drupal Custom Entities를 만드는 것의 이점은 무엇입니까?
Drupal 사용자 정의 엔티티 작성을 사용하면 자신의 데이터 구조 및 비즈니스 로직을 정의 할 수 있습니다. 이를 통해 사이트를보다 효율적이고 관리 가능하게 할 수 있습니다. Custom Entities를 사용하면 Drupal의 엔티티 API를 활용하여 엔티티를 처리 할 수있는 강력한 도구를 제공합니다. Drupal의 사용자 정의 엔티티에 필드를 추가하는 방법은 무엇입니까?
Drupal의 사용자 정의 엔터티에 필드를 추가하려면 Field API를 사용해야합니다. 여기에는 엔티티의 기본 필드 정의 방법에서 필드를 정의하는 것이 포함됩니다. Field UI 모듈을 사용하여 Drupal Management 인터페이스를 통해 엔티티에 필드를 추가 할 수도 있습니다.
Drupal에 사용자 정의 엔티티를 표시하는 방법은 무엇입니까?
Drupal에 사용자 정의 엔터티를 표시하려면 엔티티의 뷰 빌더를 만들어야합니다. 여기에는 EntityViewBuilder 클래스를 확장하고보기 메소드를 구현하는 클래스를 정의하는 것이 포함됩니다. Views 모듈을 사용하여 엔티티의 사용자 정의보기를 만들 수도 있습니다.
Drupal에서 사용자 정의 엔티티를 추가하고 편집하기위한 양식을 만드는 방법은 무엇입니까?
위 내용은 Drupal -Setup에서 자신의 사용자 정의 엔터티를 구축하십시오의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!