facets-8.x-1.x-dev/src/Plugin/facets/processor/HideNonNarrowingResultProcessor.php

src/Plugin/facets/processor/HideNonNarrowingResultProcessor.php
<?php

namespace Drupal\facets\Plugin\facets\processor;

use Drupal\Core\Cache\UnchangingCacheableDependencyTrait;
use Drupal\facets\FacetInterface;
use Drupal\facets\Processor\BuildProcessorInterface;
use Drupal\facets\Processor\ProcessorPluginBase;

/**
 * Provides a processor that hides results that don't narrow results.
 *
 * @FacetsProcessor(
 *   id = "hide_non_narrowing_result_processor",
 *   label = @Translation("Hide non-narrowing results"),
 *   description = @Translation("Only display items that will narrow the results."),
 *   stages = {
 *     "build" = 40
 *   }
 * )
 */
class HideNonNarrowingResultProcessor extends ProcessorPluginBase implements BuildProcessorInterface {

  use UnchangingCacheableDependencyTrait;

  /**
   * {@inheritdoc}
   */
  public function build(FacetInterface $facet, array $results) {
    $facetSource = $facet->getFacetSource();

    if ($facetSource) {
      $result_count = $facetSource->getCount();
    }
    else {
      // @todo Backward compatibility, should be removed!
      $facet_results = $facet->getResults();
      $result_count = 0;
      foreach ($facet_results as $result) {
        if ($result->isActive()) {
          $result_count += $result->getCount();
        }
      }
    }

    /** @var \Drupal\facets\Result\ResultInterface $result */
    foreach ($results as $id => $result) {
      $children_results = $result->getChildren();

      if ($children_results) {
        $reduced_children_results = $this->build($facet, $children_results);
        $result->setChildren($reduced_children_results);
        if ($reduced_children_results) {
          continue;
        }
      }

      if ((($result->getCount() == $result_count) || ($result->getCount() == 0)) && !$result->isActive() && !$result->hasActiveChildren()) {
        unset($results[$id]);
      }
    }

    return $results;
  }

}

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

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