저는 Drupal 8 용 elasticsearch 커넥터 모듈을 사용하여 색인을 관리하고 있습니다. https://www.drupal.org/project/elasticsearch_connectorDrupal 8 맞춤 모듈에서 클래스 확장에 도움이 필요합니다.
색인 생성 시간에 일어날 일 중 하나는 elasticsearch 색인 매핑에 일부 분석기와 필터를 추가하는 것입니다.
나는 자신의 클래스 중 하나의 create() 메소드에서 여기에서 무슨 일이 일어나고있는 곳을 추적했습니다
모듈 \있는 contrib \ elasticsearch_connector \ SRC \ ElasticSearch \ 매개 변수 \ 공장 \ IndexFactory.php
나는 그 방법을 확장하고 그것에 추가하려고 노력하고 있지만 그것을 발사하는 것처럼 보이지 않는 커스텀 모듈을 가지고있다. 모듈이 확장 페이지에 표시되면 제대로 활성화되었습니다. 지금까지 내 사용자 지정 모듈에 대한 내 폴더 구조는 다음과 같습니다
모듈은 \ 사용자가 \ elasticsearch_analyzer \ SRC \ elasticsearch_analyzer.php
<?php
namespace Drupal\elasticsearch_analyzer;
use Drupal\search_api\IndexInterface;
use Drupal\elasticsearch_connector\ElasticSearch\Parameters\Factory\IndexFactory;
class elasticsearch_analyzer extends IndexFactory {
/**
* {@inheritdoc}
*/
public static function create(IndexInterface $index) {
die('does this work?');
return [
'index' => IndexFactory::getIndexName($index),
'body' => [
'settings' => [
'number_of_shards' => $index->getOption('number_of_shards', 5),
'number_of_replicas' => $index->getOption('number_of_replicas', 1),
],
],
];
}
}
은 내가 PSR-4 표준을 둘러싼 여러 가지 조합의 무리를 시도했습니다 , 그러나 그것을 달리는 것을 얻는 것을 보일 수 없다. 이것이 우리가 일반적으로 드루팔 (Drupal 8)에서 일을 연장하는 방법입니까? 이 클래스를 모듈의 루트에있는 모듈 파일에 두어야합니까? 이 서비스에 등록해야합니까?
내가 읽은 튜토리얼을 기반으로, 블록 플러그인이나 단순 경로 페이지를 만들지 않고 기여한 모듈이나 코어를 확장하는 사례를 볼 수 없었습니다. 이제는 기존 클래스의 코드를 검사하고 OOP 상속을 사용하여 재정의 할 수 있어야합니다. 그렇지 않은가요?
Drupal 8의 이벤트 시스템에 대해 더 많이 읽었으며 drupal 콘솔을 사용하여 search_api에 대한 이벤트 목록을 볼 수있었습니다. search_api.task.addIndex search_api.task.trackItems search_api.task.updateIndex search_api.task.removeIndex search_api.task.deleteItems 내가 search_api을 수신 할 수있는 모듈을 만든 search_api.task.deleteAllIndexItems. task.addIndex하지만 현재 버전의 모듈은 "trackItems"에서만 실행됩니다. 나는 후크를 사용하여 인덱스를 변경하는 다른 방법이 있는지 알아 보려고했지만 지금까지는 행운이 없습니다. –