키 테이크 아웃
Drupal 8의 플러그인 파생 상품은 동일한 플러그인의 여러 인스턴스의 동적 선언을 허용하여 사용자 구성 기능을 플러그인으로 변환 할 수 있습니다.
DERIVER 클래스는 초기 플러그인을 기반으로하지만 구성 또는 정의 데이터가 약간 다른 플러그인 정의 목록을 제공하는 데 사용됩니다.
플러그인 관리자의 파생 된 유도체 인사이 코터는 파생 상품을 검색하고 각 플러그인에서 파괴자 클래스를 찾고 목록을 요청하는 데 사용됩니다.
플러그인 파생 상품은 강력한 도구이지만, 특히 Drupal을 처음 접하거나 플러그인 시스템에 익숙하지 않은 개발자에게는 설정 및 관리가 복잡 할 수 있습니다. 기본 플러그인의 변경 사항이 모든 파생 상품에 영향을 줄 수 있으므로 신중한 관리 및 테스트가 필요합니다.
이전 자습서에서는 Drupal 8 플러그인 시스템과 고유 한 사용자 정의 플러그인 유형을 만드는 방법을 살펴 보았습니다. Drupal 7의 _info 후크를 통해 선언 된 많은 기능 이이 플러그인으로 대체 된 것을 보았습니다. 우리의 유스 케이스는 매우 기본적이었고, 새로운 플러그인 클래스 및 관련 양식을 통해 그러한 기능의 각 인스턴스 를 수동으로 선언 할 수있었습니다.
-
그러나 우리가 그러한
인스턴스가 필요하면 작은 하위 시스템 외부의 일부 요소에 따라 동적으로 선언 된 경우 어떻게해야합니까? 예를 들어, Drupal 7에서 _info 후크를 선언 할 때 - something 목록을 얻고, 루프를 고치고, 각 개인 에 대해 반환 된 배열에서 새 항목을 선언 할 수 있습니다. 메뉴 시스템은 Drupal Core와 함께 제공되거나 나중에 UI를 통해 생성되는 각 메뉴에 새 블록을 제공하기 위해이를 수행합니다.
Drupal 8은 어떻습니까? 특정 유형의 각 플러그인마다 다른 PHP 클래스를 선언해야합니다. 새 블록을 만들려면 새로운 클래스가 필요합니다. 다른 블록을 만들려면 다른 클래스가 필요합니다. 그래서 우리는 Drupal 7에서 볼 수있는 루핑 가 어디에서 일어날까요? 이것에 대한 짧은 대답은 다음과 같습니다.
- 플러그인 파생물 .
이 기사에서 우리는 그것에 대한 긴 대답을 탐구하고 파생물이 무엇인지, 어떻게 사용할 수 있는지 배울 것입니다. 후자의 경우, 우리는이 git 저장소에서 찾을 수있는 데모 모듈 내부에 예제를 작성하고 진행 상황을 더 잘 이해하도록 도와 줄 것입니다. 약간 더 복잡한 예를 들어, 메뉴 시스템은 각 메뉴에 대한 개별 블록을 제공하므로 (Drupal 7과 유사하지만 플러그인을 사용). 우리가 할 일은 실제로 매우 간단합니다. 우리는 사이트의 모든 기사 노드에 대해 블록이있을 기본 노드 블록 기능을 구현할 것입니다. 말도 안 되는? 확신하는. 사이트의 모든 노드에 대해이 작업을 수행해야합니까? 확실히! 그러나 그것은 물건을 짧게 유지하고 플러그인 파생 상품의 사용을 보여주기위한 매우 기본적인 구현입니다.
.
플러그인 파생 상품
플러그인 파생 상품은 특정 유형의 플러그인을 시스템에서 여러 인스턴스로 표현할 수있는 방법입니다. 다시 말해, 플러그인은 초기 플러그인을 기반으로하는 플러그인 정의 목록 (동일한 기본 정의에서 시작)이지만 구성 또는 정의 데이터를 약간 다른 플러그인 정의 목록을 제공하는 디버 클래스를 참조 할 수 있습니다. 위에서 언급 한 SystemMenublock이 좋은 예입니다. 사이트에 메뉴가있는 것만 큼 많은 파생물을 가진 단일 플러그인입니다.
약간 더 깊게 진행하려면 특정 유형의 모든 플러그인 목록이 요청되면 플러그인 관리자는 발견 메커니즘을 사용 하여이 유형의 모든 플러그인을로드합니다. 해당 메커니즘이 유도체 인사 오버 사이 코터로 장식되면 관리자는 파생 상품을 검색 할 수 있습니다. 이를 위해, 파생적 발견은 각 플러그인에서 파생물 클래스를 찾고, 하나를 찾으면이 목록을 요청합니다.
기본 플러그 인 매너베이스 클래스를 확장하는 플러그인 유형 관리자는 일반적으로 기본 검색 (주석)을 장식하는 파생적 발견 메커니즘을 가져야합니다. 이것은 Drupal Core 플러그인 시스템에서 가장 일반적인 패턴입니다. 파생 상품에 의해 포장 된 주석이 달린 발견.
미분 클래스
이제 플러그인 파생 상품의 역할이 무엇인지 알았으므로 블록 플러그인 (1 분 안에 생성 할)에서 사용할 첫 번째 디버 클래스를 만들어 봅시다.
내부 SRC/플러그인/파생물/NodeBlock.php 데모 모듈의 다음이 있습니다.
우리의 클래스는 구현 해야하는 모든 클래스가 Deriverinterface이며 두 가지 방법을 구현합니다. 우리는 대신 컨테이너 컨테이너 컨테이너를 인식하기를 원하기 때문에 ContainerDeriverInterface를 사용합니다. 왜? 노드 저장소에 액세스 할 수 있도록 Drupal의 Entity Manager를로드하기 위해 종속성 주입을 사용하기 때문에 (이것은 생성자 및 Create () 메소드가 수행하는 것입니다). 또한 Deriver 클래스는 Deriverbase 클래스에서 확장되어 필요한 방법 중 하나를 이미 처리하고 있기 때문입니다 (getDerivativedEfinition ()).마지막으로, getDerivativedEfinitions ()는이 클래스를 사용하는 플러그인에서 파생 된 플러그인 정의 배열을 제공하는 방법입니다. $ base_plugin_definition을 인수 (이 deriver를 사용하는 실제 플러그인의 정의)로 받고 파생 정의를 구축하는 데 사용합니다. 우리의 경우, 우리는 모든 기사 노드를 무차별 적으로로드하고 각각의 기사 노드에 다른 admin_label (drupalcoreblockannotationBlock 주석 클래스의 속성입니다)을 갖는 것만으로 만 다른 별도의 정의를 만듭니다. 파생 상품의 배열은 파생 상품의 ID에 의해 키를 표시합니다 (우리가 나중에 사용할 노드 ID).
우리가 여기서 만들어야하는 매우 중요한 점은 모든 노드를로드하고 플러그인을 만들어내는 것이 결코 좋은 생각이 아니라는 것입니다. 흥미로운 점은 개별 노드가 확인란이나 그와 비슷한 것을 통해 블록으로 노출 될 수있는 기능을 구현하는 것입니다.
블록 플러그인
이제 Deriver 클래스가 있으므로 이제 여러 인스턴스를 생성하는 데 사용하는 간단한 블록 플러그인을 만들어 봅시다 (각 기사 노드마다 하나씩).
내부 SRC/플러그인/블록/NodeBlock.php 내부
이 플러그인의 주석에서 가장 먼저 알아 차리는 것은 이전에 만든 클래스를 가리키는 디버 키입니다. 그리고 그것은 기본적으로 우리가 두 가지를 결합하는 데 필요한 전부입니다. 파생적 발견 데코레이터는 무거운 리프팅을 처리합니다
나머지의 대부분은 우리가 익숙 해야하는 기본 블록 빌딩입니다. 흥미로운 점은 GetDerivativeId () 메소드를 사용하여 표시되는 파생 상품의 ID로 사용한 노드 ID를 검색하고 노드 객체를로드하고 블록을 실제 노드 출력으로 빌드 할 수 있다는 것입니다. 마지막으로, BlockAccess () 메소드 내부 에서이 블록에 실제 노드 자체와 동일한 액세스 점검이 있는지 확인합니다. 따라서 현재 사용자가 현재 노드를 볼 수있는 액세스 권한이 없으면 블록도 나타나지 않습니다.
이제 캐시를 지우고 블록 레이아웃 인터페이스로 이동하면 Node Block : [노드 제목]이라는 블록이 표시됩니다. 원하는 위치에 배치 할 수 있으며 관련 노드를 렌더링합니다.
결론
이 기사에서는 플러그인 파생 상품을 살펴보고 작동 방식에 대한 간단한 예를 보았습니다. 이 주제에 대한 키는 플러그인 파생 상품이 동일한 플러그인의 여러 인스턴스를 동적으로 선언하는 방식이라는 것입니다. 일반적으로 사용자 구성 기능 (예 : 메뉴)을 플러그인 (예 : 메뉴 블록)으로 변환하는 데 도움이됩니다.
파생 상품의 사용을 설명하기 위해 기사 노드를 블록으로 렌더링 할 수있는 매우 간단한 기술을 보았습니다. 우리는 많은 기사 노드가있는 웹 사이트에서 이것을 시도하지 않고 오히려 노출되는 노드 수를 제한하는 추가 기능을 구현하는 것을 기억해야합니다. 알다시피, 우리는 우리 사이트를 충돌시키지 않습니다.
질문? 댓글? 더 설명하고 싶은 것이 있습니까? 알려주세요!
Drupal 8 플러그인 파생 상품 사용에 대한 자주 묻는 질문 (FAQ)
Drupal 8 플러그인 파생 상품이란 무엇입니까? 왜 중요한가?
Drupal 8 플러그인 파생 상품은 개발자가 단일 플러그인의 여러 인스턴스를 동적으로 생성 할 수있는 Drupal 8의 강력한 기능입니다. 이는 수행 할 비슷한 작업이 많을 때 특히 유용하지만 각 작업에는 약간 다른 구성이 필요합니다. 플러그인 파생 상품을 사용하면 단일 기본 플러그인을 만들고 각각 고유 한 구성으로 필요한만큼 해당 플러그인의 변형을 생성 할 수 있습니다. 이렇게하면 코드를 크게 단순화하고 Drupal 8 사이트를보다 효율적이고 관리하기 쉽게 만들 수 있습니다.
Drupal 8 플러그인 파생 상품을 어떻게 만들 수 있습니까?
Drupal 8 플러그인 파생 상품 만들기 몇 단계가 포함됩니다. . 먼저 모든 파생 상품이 공유 할 기본 기능을 정의하는 기본 플러그인을 만들어야합니다. 다음으로, 기본 플러그인을 확장하고 파생 상호 표면을 구현하는 플러그인 파생 클래스를 만들어야합니다. 이 클래스는 개별 파생 상품을 생성 할 책임이 있습니다. 마지막으로 Drupal의 플러그인 매니저에 플러그인 파생 상품을 발견하고 사용할 수 있도록 플러그인 파생물을 등록해야합니다.
사용자 정의 모듈과 함께 Drupal 8 플러그인 파생 상품을 사용할 수 있습니까? 예, Drupal 8 플러그인 파생 상품은 사용자 정의 모듈과 함께 사용할 수 있습니다. 실제로, 단일 기본 모듈을 생성 한 다음 각각 고유 한 구성으로 해당 모듈의 여러 변형을 생성 할 수 있으므로 이러한 맥락에서 특히 유용합니다. 이것은 개발 프로세스를 크게 단순화하고 사용자 정의 모듈을보다 효율적이고 관리하기 쉽게 만들 수 있습니다. Drupal 8 플러그인 파생 상품의 일반적인 사용 사례는 무엇입니까?
Drupal 8 플러그인 파생 상품은 엄청나게 다재다능합니다. 광범위한 시나리오에서 사용할 수 있습니다. 일부 일반적인 사용 사례에는 각각 다른 구성이있는 블록 플러그인의 여러 인스턴스를 작성하는 것이 포함됩니다. 단일 기본 플러그인에서 여러 메뉴 링크 생성; 각각의 특정 작업 또는 요구 사항에 맞게 맞춤형 사용자 정의 모듈의 여러 변형 생성을 작성합니다. Drupal 8 플러그인 파생 상품을 관리하고 유지 관리하는 방법?
Drupal 8 플러그인 파생 상품 관리 및 유지 관리는 유지 관리가 포함됩니다. 기본 플러그인과 모든 파생 상품을 추적하여 모두 최신 상태이며 올바르게 작동합니다. 이것은 모든 플러그인을 관리하기위한 중앙 집중식 인터페이스를 제공하는 Drupal의 플러그인 관리자를 통해 수행 할 수 있습니다. 또한 플러그인 파생 상품을 정기적으로 검토하고 업데이트하여 사이트 사용자의 요구와 요구 사항을 계속 충족시키는 것이 중요합니다. Drupal 8 플러그인 파생 상품을 사용하는 데 제한이 있거나 도전이 있습니까? Drupal 8 플러그인 파생 상품은 강력한 도구이지만 몇 가지 과제가 있습니다. 주요 과제 중 하나는 특히 Drupal을 처음 접하거나 플러그인 시스템에 익숙하지 않은 개발자에게는 설정 및 관리가 복잡 할 수 있다는 것입니다. 또한 각 파생물은 단일 기본 플러그인의 변형이기 때문에 기본 플러그인의 변경 사항은 모든 파생 상품에 잠재적으로 영향을 줄 수 있으므로 신중한 관리 및 테스트가 필요합니다.
Drupal 8 플러그인 파생 상품을 3 번째로 사용할 수 있습니까? 파티 플러그인?
예, Drupal 8 플러그인 파생 상품은 타사 플러그인과 함께 사용할 수 있습니다. 그러나 모든 타사 플러그인이 파생 상품을 지원하도록 설계된 것은 아니므로 호환되도록 추가 작업을 수행해야 할 수도 있습니다. 파생 상품을 지원하는지 확인하기 위해 사용중인 특정 플러그인의 문서를 항상 확인하십시오. Drupal 8 플러그인 파생 상품은 사이트 성능을 향상시키는 방법?
Drupal 8 플러그인 파생 상품 각 작업에 대해 실행 해야하는 코드의 양을 줄임으로써 사이트 성능을 향상시킬 수 있습니다. 단일 기본 플러그인을 작성한 다음 여러 파생물을 생성하면 각 작업에 대해 별도의 코드를 작성하고 실행하지 않아도됩니다. 이로 인해 특히 유사한 많은 작업이있는 사이트의 경우 상당한 성능 향상이 발생할 수 있습니다. Drupal 8 플러그인 파생 상품의 문제를 디버깅하는 방법?
Drupal 8 플러그인 파생 상품으로 문제를 디버깅하는 방법 역동적 인 특성으로 인해 어려울 수 있습니다. 그러나 Drupal은 이에 도움이되는 몇 가지 도구와 기술을 제공합니다. 가장 유용한 것 중 하나는 다양한 디버깅 및 개발 도구를 제공하는 Devel 모듈입니다. 또한 Drupal의 오류 로깅 및보고 기능은 발생하는 모든 문제에 대한 귀중한 정보를 제공 할 수 있습니다. Drupal 8 플러그인 파생 상품을 효과적으로 사용하는 데 더 많은 리소스를 찾을 수 있습니까?
온라인에서 온라인으로 사용할 수있는 많은 리소스가 있습니다. Drupal 8 플러그인 파생 상품에 대한 자세한 내용. 공식 Drupal 문서는 플러그인 파생 상품을 포함하여 Drupal 개발의 모든 측면에 대한 포괄적 인 정보를 제공하기 때문에 시작하기에 좋은 장소입니다. 또한이 주제를 자세히 다룰 수있는 많은 튜토리얼, 블로그 게시물 및 포럼 토론이 있습니다.
위 내용은 Drupal 8 플러그인 파생 상품 사용에 대한 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!