Untitled

 avatar
unknown
plain_text
6 months ago
2.1 kB
4
Indexable

custom_search_filter.info.yml

name: 'Custom Search Filter'
type: module
description: 'A custom module to filter out media entities not referenced by any content.'
core_version_requirement: ^10
package: Custom
dependencies:
  - search_api:search_api
  - entity_usage:entity_usage
version: '1.0.0'


custom_search_filter.module

<?php

/**
 * @file
 * Custom module to add a processor for filtering referenced media entities.
 */

/**
 * Implements hook_help().
 */
function custom_search_filter_help($route_name, \Drupal\Core\Routing\RouteMatchInterface $route_match) {
  switch ($route_name) {
    case 'help.page.custom_search_filter':
      return '<p>' . t('Custom module to index only referenced media entities in Solr.') . '</p>';
  }
}


src/Plugin/search_api/processor/MediaReferenceProcessor.php


<?php

namespace Drupal\custom_search_filter\Plugin\search_api\processor;

use Drupal\search_api\Processor\ProcessorPluginBase;
use Drupal\search_api\Item\ItemInterface;
use Drupal\media\Entity\Media;

/**
 * Filters out media entities not referenced by content.
 *
 * @SearchApiProcessor(
 *   id = "media_reference_processor",
 *   label = @Translation("Media Reference Processor"),
 *   description = @Translation("Only index media entities that are referenced by other content."),
 *   stages = {
 *     "alter_items" = 0
 *   }
 * )
 */
class MediaReferenceProcessor extends ProcessorPluginBase {

  /**
   * {@inheritdoc}
   */
  public function alterIndexedItems(array &$items) {
    // Loop through all items in the index.
    foreach ($items as $id => $item) {
      // Get the entity from the indexed item.
      $entity = $item->getOriginalObject()->getValue();
      
      // Check if the entity is a Media entity.
      if ($entity instanceof Media) {
        // Use entity_usage service to check if the media is referenced.
        $usage = \Drupal::service('entity_usage.usage')->getUsage($entity);

        // If the media is not referenced, remove it from indexing.
        if (empty($usage)) {
          unset($items[$id]);
        }
      }
    }
  }

}
Editor is loading...
Leave a Comment