Drupal 7搜索API挂钩注册的回调类没有被触发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Drupal 7搜索API挂钩注册的回调类没有被触发相关的知识,希望对你有一定的参考价值。

我对php很新(除了很多年前的一些小尝试)和Drupal 7。我正在使用Search API查看项目,并尝试从搜索索引中排除某些文件。为了达到这个目的,我跟着这个link

但它不会起作用。更改选项未显示在搜索API文件索引的配置中。我添加了以下两个文件:

search_exclude_webform_files.module

<?php
/*
 * Implements hook_search_api_alter_callback_info()
 */
function search_exclude_webform_files_search_api_alter_callback_info() {
    // Adds a filter to exclude private files from the index
    $callbacks['exclude_private_files'] = array(
        'name' => t('Exclude private files'),
        'description' => t('Excludes private webform files from being indexed in search'),
        'class' => 'SearchApiExcludeWebformFiles',
        'weight' => 100,
    );
    return $callbacks;
}

callback_private_Web form_files.Inc

<?php

/**
 * @file
 * Contains SearchApiExcludeWebformFiles.
 */


/**
 * The following class is used to provide file filtering for webform files. It ensures
 * they are not indexed by Search.
 */
class SearchApiExcludeWebformFiles extends SearchApiAbstractAlterCallback {


    // This filter is only available on file entities
    public function supportsIndex(SearchApiIndex $index) {
//        return $index->getEntityType() === 'file';
        return true;
    }


    // For each file item that is indexed if the URI field contains the private
    // prefix, do not index the file by unsetting it
    public function alterItems(array &$items) {
        foreach ($items as $k => $item) {
            if (strpos($item->uri, 'private://webform') !== false || strpos($item->uri, 'files/private/webform') !== false || strpos($item->uri, 'files/webform') !== false) {
                unset($items[$k]);
            }
        }
    }
}

钩子激活,我可以从search_api回调数组中注册的第一个文件中找到回调。但是,注册类SearchApiExcludeWebformFiles永远不会被解决。其他内置的更改(我尝试了几个特定于用户的内容,例如用户内容)正在工作,这意味着如果我在supportsIndex函数中返回true,我可以在任何搜索API索引中激活它们。正如你所看到的,我只是在这个中返回true,但是,它仍然没有在我的任何搜索API索引中显示。

我是否错过了关于正确注册班级SearchApiExcludeWebformFiles的事情?或者是否还有其他因素阻止此设置成功?

谢谢和问候。

答案

在交换了许多组件和模块部件后,我得出以下结论:Drupal不喜欢.module之外的额外文件。我将整个类重新插入search_exclude_webform_files.module文件中。通过这种方式,可以找到班级。我的模块文件现在看起来像这样:

<?php

/*
 * Implements hook_search_api_alter_callback_info()
 */

function search_exclude_webform_files_search_api_alter_callback_info() {
    // Adds a filter to exclude private files from the index
    $callbacks['search_api_exclude_webform_files'] = array(
        'name' => t('Exclude private webform files'),
        'description' => t('Excludes private webform files from being indexed in search'),
        'class' => 'SearchApiAlterExcludeFormFiles',
    );
    return $callbacks;
}

/**
 * The following class is used to provide file filtering for webform files. It ensures
 * they are not indexed by Search.
 */
class SearchApiAlterExcludeFormFiles extends SearchApiAbstractAlterCallback {


    // This filter is only available on file entities
    public function supportsIndex(SearchApiIndex $index) {
        return $index->getEntityType() === 'file';
    }


    // For each file item that is indexed if the URI field contains the private
    // prefix, do not index the file by unsetting it
    public function alterItems(array &$items) {
        foreach ($items as $k => $item) {
            if (strpos($item->uri, 'private://webform') !== false || strpos($item->uri, 'files/private/webform') !== false || strpos($item->uri, 'files/webform') !== false) {
                unset($items[$k]);
            }
        }
    }
}

我也改变了数组名称和类名,但位置是我完成这个技巧的最后一步。

以上是关于Drupal 7搜索API挂钩注册的回调类没有被触发的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 7 GeoField Proximity 使用搜索 API 索引

如何在Drupal模块中抛出404错误?

字段集合替代?需要可通过 Search API 搜索的子字段(Drupal 7)

如何在 Drupal 7 Search API 模块中将内容实体标记为脏

如何在 Drupal 模块中抛出 404 错误?

需要有关 drupal、ubercart 和产品加载模块挂钩的帮助