class JsonApiResponseWidget in JSON:API Search API 8
A simple widget class that returns for inclusion in JSON:API Search API.
@FacetsWidget( id = "jsonapi_search_api", label = @Translation("JSON:API Search API"), description = @Translation("A widget that builds an array with results. Used only for integrating into JSON:API Search API."), )
@note: This widget is almost identical to ArrayWidget except changing how URLs are being generated as to not leak cacheable metadata.
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\facets\Widget\WidgetPluginBase implements WidgetPluginInterface
- class \Drupal\jsonapi_search_api_facets\Plugin\facets\widget\JsonApiResponseWidget
- class \Drupal\facets\Widget\WidgetPluginBase implements WidgetPluginInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of JsonApiResponseWidget
File
- modules/
jsonapi_search_api_facets/ src/ Plugin/ facets/ widget/ JsonApiResponseWidget.php, line 21
Namespace
Drupal\jsonapi_search_api_facets\Plugin\facets\widgetView source
class JsonApiResponseWidget extends WidgetPluginBase {
/**
* {@inheritdoc}
*/
public function build(FacetInterface $facet) {
$build = [
'id' => $facet
->id(),
'label' => $facet
->getName(),
'path' => $facet
->getUrlAlias(),
'terms' => [],
];
$configuration = $facet
->getWidget();
$this->showNumbers = empty($configuration['show_numbers']) ? FALSE : (bool) $configuration['show_numbers'];
foreach ($facet
->getResults() as $result) {
if ($result
->getUrl() === NULL) {
$build['terms'][] = $this
->generateValues($result);
}
else {
$build['terms'][] = $this
->buildListItems($facet, $result);
}
}
return $build;
}
/**
* {@inheritdoc}
*/
protected function buildListItems(FacetInterface $facet, ResultInterface $result) {
if ($children = $result
->getChildren()) {
$items = $this
->prepare($result);
$children_markup = [];
foreach ($children as $child) {
$children_markup[] = $this
->buildChildren($child);
}
$items['children'] = [
$children_markup,
];
}
else {
$items = $this
->prepare($result);
}
return $items;
}
/**
* Prepares the URL and values for the facet.
*
* @param \Drupal\facets\Result\ResultInterface $result
* A result item.
*
* @return array
* The results.
*/
protected function prepare(ResultInterface $result) {
$values = $this
->generateValues($result);
$url = $result
->getUrl();
if ($url === NULL) {
$facet_values = $values;
}
else {
$facet_values['url'] = $url
->setAbsolute(TRUE)
->toString(TRUE)
->getGeneratedUrl();
$facet_values['values'] = $values;
}
return $facet_values;
}
/**
* Builds an array for children results.
*
* @param \Drupal\facets\Result\ResultInterface $child
* A result item.
*
* @return array
* An array with the results.
*/
protected function buildChildren(ResultInterface $child) {
$values = $this
->generateValues($child);
$url = $child
->getUrl();
if ($url !== NULL) {
$facet_values['url'] = $url
->setAbsolute(TRUE)
->toString(TRUE)
->getGeneratedUrl();
$facet_values['values'] = $values;
}
else {
$facet_values = $values;
}
return $facet_values;
}
/**
* Generates the value and the url.
*
* @param \Drupal\facets\Result\ResultInterface $result
* The result to extract the values.
*
* @return array
* The values.
*/
protected function generateValues(ResultInterface $result) {
$values = [
'value' => $result
->getRawValue(),
'label' => $result
->getDisplayValue(),
'active' => $result
->isActive(),
];
if ($this->configuration['show_numbers']) {
$values['count'] = (int) $result
->getCount();
}
return $values;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
JsonApiResponseWidget:: |
public | function |
Builds the facet widget for rendering. Overrides WidgetPluginBase:: |
|
JsonApiResponseWidget:: |
protected | function | Builds an array for children results. | |
JsonApiResponseWidget:: |
protected | function |
Builds a renderable array of result items. Overrides WidgetPluginBase:: |
|
JsonApiResponseWidget:: |
protected | function | Generates the value and the url. | |
JsonApiResponseWidget:: |
protected | function | Prepares the URL and values for the facet. | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
WidgetPluginBase:: |
protected | property | The facet the widget is being built for. | |
WidgetPluginBase:: |
protected | property | Show the amount of results next to the result. | |
WidgetPluginBase:: |
public | function |
Provides a configuration form for this widget. Overrides WidgetPluginInterface:: |
3 |
WidgetPluginBase:: |
protected | function | Builds a facet result item. | |
WidgetPluginBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
|
WidgetPluginBase:: |
public | function |
Gets default configuration for this plugin. Overrides ConfigurableInterface:: |
3 |
WidgetPluginBase:: |
public | function |
Gets this plugin's configuration. Overrides ConfigurableInterface:: |
|
WidgetPluginBase:: |
protected | function | Provides a full array of possible theme functions to try for a given hook. | |
WidgetPluginBase:: |
public | function |
Picks the preferred query type for this widget. Overrides WidgetPluginInterface:: |
3 |
WidgetPluginBase:: |
public | function |
Checks is a specific property is required for this widget. Overrides WidgetPluginInterface:: |
2 |
WidgetPluginBase:: |
protected | function | Returns the text or link for an item. | |
WidgetPluginBase:: |
public | function |
Sets the configuration for this plugin instance. Overrides ConfigurableInterface:: |
|
WidgetPluginBase:: |
public | function |
Checks if the facet is supported by this processor. Overrides WidgetPluginInterface:: |
1 |
WidgetPluginBase:: |
public | function |
Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase:: |