dsfr_typesense-2.1.x-dev/src/Plugin/Block/TypeSenseSearchBlock.php

src/Plugin/Block/TypeSenseSearchBlock.php
<?php

namespace Drupal\dsfr_typesense\Plugin\Block;

use Drupal\Core\Block\BlockBase;

use Drupal\search_api\IndexInterface;
use Drupal\search_api_typesense\AiModels;
use Drupal\search_api_typesense\Api\SearchApiTypesenseException;
use Drupal\search_api_typesense\Plugin\search_api\backend\SearchApiTypesenseBackend;

use Drupal\search_api\Entity\Index;

/**
 * Provides a "Typesense Search" block.
 *
 * @Block(
 *   id = "dsfr_typesense_search_block",
 *   admin_label = @Translation("DSFR Typesense Search Block")
 * )
 */
class TypesenseSearchBlock extends BlockBase {

  /**
   * {@inheritdoc}
   * 
   * @param \Drupal\search_api\IndexInterface $search_api_index
   *   The search index.
   */
  public function build() {
 
    $search_api_index = Index::load('typesense_index');
    $backend = $search_api_index->getServerInstance()->getBackend();

    $configuration = $backend->getConfiguration();
    $typesense_client = $backend->getTypesenseClient();


    $all_fields = $typesense_client->getFields($search_api_index->id());
    $query_by_fields = $typesense_client->getFieldsForQueryBy($search_api_index->id());
    $facet_number_fields = $typesense_client->getFieldsForFacetNumber($search_api_index->id());
    $facet_string_fields = $typesense_client->getFieldsForFacetString($search_api_index->id());
    $schema = $backend->getSchema($search_api_index->id())?->getSchema();
    $query_by_weights = $schema['fields'] ? $typesense_client->getQueryByWeight($schema['fields']) : '';
    $sort_by_fields = $typesense_client->getFieldsForSortBy($schema['fields']);

    $search_api_typesense = [
      'api_key' => $configuration['admin_api_key'],
      'host' => $configuration['nodes'][0]['host'],
      'port' => $configuration['nodes'][0]['port'],
      'protocol' => $configuration['nodes'][0]['protocol'],
      'index' => $search_api_index->id(),
      'all_fields' => $all_fields,
      'query_by_fields' => \implode(',', $query_by_fields),
      'query_by_weights' => \implode(',', $query_by_weights),
      'sort_by_fields' => \implode(',', $sort_by_fields),
      'facet_number_fields' => $facet_number_fields,
      'facet_string_fields' => $facet_string_fields,
    ];

    return [
      '#theme' => 'search_api_typesense_search',
      '#attached' => [
        'library' => [
          // 'search_api_typesense/search',
          'dsfr_typesense/search',
        ],
        'drupalSettings' => [
          'search_api_typesense' => $search_api_typesense
        ],
      ],
      '#facet_number_fields' => $facet_number_fields,
      '#facet_string_fields' => $facet_string_fields,
    ];
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc