我正在使用Drupal 8的elasticsearch连接器模块来管理索引。 https://www.drupal.org/project/elasticsearch_connector需要帮助扩展Drupal 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中扩展事物的吗?我应该把这个类放在模块根目录下的.module文件中吗?我应该注册这项服务吗?
根据我读过的教程,在创建块插件或简单路由页面之外,我一直无法看到扩展贡献模块或核心的任何示例。我现在认为我们已经脱离了钩世界,我应该能够检查现有类中的代码并使用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.task.deleteAllIndexItems 我创建了一个模块来监听search_api。 task.addIndex,但它看起来像模块的当前版本只在“trackItems”上触发。我一直在试图看看是否有其他方法使用钩子来改变索引,但目前还没有运气。 –