Я довольно новичок в PHP (за исключением незначительных попыток много лет назад) и в Drupal 7. Я смотрю в проект с использованием API поиска и пытаюсь исключить некоторые файлы из моего поискового индекса. Чтобы добиться этого, я перешел по этой ссылке .
Но это не сработает. Параметр изменения не отображается в конфигурации индекса файла 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_webform_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
никогда не адресуется. Другие встроенные изменения (я пробовал несколько пользовательских изменений, таких как пользовательский контент) работают, это означает, что я могу активировать их в любом индексе API поиска, если я просто верну true в функции supportsIndex
. Как вы можете видеть, я просто возвращаю истину и в этом, но все же, он не отображается ни в одном из моих индексов API поиска.
Я что-то упустил из-за правильной регистрации класса SearchApiExcludeWebformFiles
? Или есть что-то еще, что мешает выполнению этой настройки?
Спасибо и приветствия.