class CshsGroupByRootFormatter in Client-side Hierarchical Select 8.3
Same name and namespace in other branches
- 8 src/Plugin/Field/FieldFormatter/CshsGroupByRootFormatter.php \Drupal\cshs\Plugin\Field\FieldFormatter\CshsGroupByRootFormatter
- 8.2 src/Plugin/Field/FieldFormatter/CshsGroupByRootFormatter.php \Drupal\cshs\Plugin\Field\FieldFormatter\CshsGroupByRootFormatter
Plugin implementation of the "Group by root" formatter.
@FieldFormatter( id = "cshs_group_by_root", label = @Translation("Hierarchy grouped by root"), description = @Translation("Display the hierarchy of the taxonomy term grouped by root."), field_types = { "entity_reference", }, )
@example The result of a multivalued selection, grouped by root. @code Given: field_tags.0: a, b, c field_tags.1: a, b1 field_tags.2: a, b, c, d field_tags.3: a1, b1, c1 field_tags.4: a1, b1, c1, d1
Result (reverse=FALSE): a
- b
- c
- b1
- d
a1
- b1
- c1
- d1
Result (reverse=TRUE): c
- b
- a
b1
- a
d
- c
- b
- a
c1
- b1
- a1
d1
- c1
- b1
- a1
@code
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Field\FormatterBase implements FormatterInterface, ContainerFactoryPluginInterface
- class \Drupal\Core\Field\Plugin\Field\FieldFormatter\EntityReferenceFormatterBase
- class \Drupal\cshs\Plugin\Field\FieldFormatter\CshsFormatterBase uses IsApplicable, TaxonomyStorages
- class \Drupal\cshs\Plugin\Field\FieldFormatter\CshsGroupByRootFormatter
- class \Drupal\cshs\Plugin\Field\FieldFormatter\CshsFormatterBase uses IsApplicable, TaxonomyStorages
- class \Drupal\Core\Field\Plugin\Field\FieldFormatter\EntityReferenceFormatterBase
- class \Drupal\Core\Field\FormatterBase implements FormatterInterface, ContainerFactoryPluginInterface
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of CshsGroupByRootFormatter
File
- src/
Plugin/ Field/ FieldFormatter/ CshsGroupByRootFormatter.php, line 60
Namespace
Drupal\cshs\Plugin\Field\FieldFormatterView source
class CshsGroupByRootFormatter extends CshsFormatterBase {
/**
* The option to disable sorting.
*/
public const SORT_NONE = 'none';
/**
* The option to sort children descendingly.
*/
public const SORT_DESC = 'desc';
/**
* The option to sort children ascendingly.
*/
public const SORT_ASC = 'asc';
/**
* The list of all available sorting variants.
*/
protected const SORT_OPTIONS = [
self::SORT_NONE => 'None',
self::SORT_DESC => 'Descending',
self::SORT_ASC => 'Ascending',
];
/**
* The list of PHP functions that sort an array by key.
*
* NOTES:
* - the function must modify the argument by reference;
* - the function argument must be an associative array because sorting
* happens by keys.
*
* @see \krsort()
* @see \ksort()
*/
protected const SORT_FUNCTIONS = [
self::SORT_DESC => '\\krsort',
self::SORT_ASC => '\\ksort',
];
/**
* {@inheritdoc}
*/
public static function defaultSettings() : array {
$settings = parent::defaultSettings();
$settings['sort'] = static::SORT_NONE;
$settings['depth'] = 0;
return $settings;
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) : array {
$element = parent::settingsForm($form, $form_state);
$element['sort'] = [
'#type' => 'select',
'#title' => $this
->t('Sorting'),
'#options' => \array_map([
$this,
't',
], static::SORT_OPTIONS),
'#default_value' => $this
->getSetting('sort'),
];
$element['depth'] = [
'#type' => 'number',
'#min' => 0,
'#title' => $this
->t('Depth'),
'#description' => $this
->t('The maximum hierarchy depth. Use 0 to not limit or 1 to display just the root term (or the last if reverse order selected).'),
'#default_value' => $this
->getSetting('depth'),
];
return $element;
}
/**
* {@inheritdoc}
*/
public function settingsSummary() : array {
$summary = parent::settingsSummary();
$summary[] = $this
->t('Sorting: @value', [
'@value' => static::SORT_OPTIONS[$this
->getSetting('sort')],
]);
$summary[] = $this
->t('Depth: @value', [
'@value' => $this
->getSetting('depth') ?: $this
->t('Unlimited'),
]);
return $summary;
}
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items, $langcode) : array {
$depth = $this
->getSetting('depth');
$linked = $this
->getSetting('linked');
$reverse = $this
->getSetting('reverse');
$elements = [];
foreach ($this
->getEntitiesToView($items, $langcode) as $term) {
$tree = $this
->getTermParents($term, !$reverse);
if ($depth > 0) {
// @todo This is not an optimal solution as we may load lots of entities that won't be used.
$tree = \array_slice($tree, 0, $depth, TRUE);
}
$labels = $this
->getTermsLabels($tree, $linked);
$root = \array_shift($tree);
$root_id = $root
->id();
$root_label = \array_shift($labels);
if (!isset($elements[$root_id])) {
$elements[$root_id] = [
'#theme' => 'cshs_term_group',
'#id' => $root_id,
'#title' => $root_label,
'#terms' => [],
];
}
// Replace calls to `\array_merge()` and `\array_unique()` by the loop.
foreach ($labels as $i => $label) {
$unique_key = (string) $tree[$i]
->label();
if (!isset($elements[$root_id]['#terms'][$unique_key])) {
$elements[$root_id]['#terms'][$unique_key] = [
'id' => $tree[$i]
->id(),
'label' => $label,
'parent' => $tree[$i]->parent->target_id,
];
}
}
}
if ($sort_function = static::SORT_FUNCTIONS[$this
->getSetting('sort')] ?? NULL) {
foreach ($elements as $root_id => $element) {
$sort_function($elements[$root_id]['#terms']);
}
}
return $elements;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
CshsFormatterBase:: |
protected | function | Returns an array of all parents for a given term. | |
CshsFormatterBase:: |
protected | function | Returns the list of terms labels. | |
CshsGroupByRootFormatter:: |
public static | function |
Defines the default settings for this plugin. Overrides CshsFormatterBase:: |
|
CshsGroupByRootFormatter:: |
public | function |
Returns a form to configure settings for the formatter. Overrides CshsFormatterBase:: |
|
CshsGroupByRootFormatter:: |
public | function |
Returns a short summary for the current formatter settings. Overrides CshsFormatterBase:: |
|
CshsGroupByRootFormatter:: |
public | constant | The option to sort children ascendingly. | |
CshsGroupByRootFormatter:: |
public | constant | The option to sort children descendingly. | |
CshsGroupByRootFormatter:: |
protected | constant | The list of PHP functions that sort an array by key. | |
CshsGroupByRootFormatter:: |
public | constant | The option to disable sorting. | |
CshsGroupByRootFormatter:: |
protected | constant | The list of all available sorting variants. | |
CshsGroupByRootFormatter:: |
public | function |
Builds a renderable array for a field value. Overrides FormatterInterface:: |
|
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 | |
EntityReferenceFormatterBase:: |
protected | function | Checks access to the given entity. | 3 |
EntityReferenceFormatterBase:: |
protected | function | Returns the referenced entities for display. | 1 |
EntityReferenceFormatterBase:: |
protected | function | Returns whether the entity referenced by an item needs to be loaded. | 1 |
EntityReferenceFormatterBase:: |
public | function |
Loads the entities referenced in that field across all the entities being
viewed. Overrides FormatterBase:: |
|
EntityReferenceFormatterBase:: |
public | function |
Overrides FormatterBase:: |
|
FormatterBase:: |
protected | property | The field definition. | |
FormatterBase:: |
protected | property | The label display setting. | |
FormatterBase:: |
protected | property |
The formatter settings. Overrides PluginSettingsBase:: |
|
FormatterBase:: |
protected | property | The view mode. | |
FormatterBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
11 |
FormatterBase:: |
protected | function | Returns the value of a field setting. | |
FormatterBase:: |
protected | function | Returns the array of field settings. | |
FormatterBase:: |
public | function |
Constructs a FormatterBase object. Overrides PluginBase:: |
11 |
IsApplicable:: |
public static | function | ||
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. | |
PluginSettingsBase:: |
protected | property | Whether default settings have been merged into the current $settings. | |
PluginSettingsBase:: |
protected | property | The plugin settings injected by third party modules. | |
PluginSettingsBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
6 |
PluginSettingsBase:: |
public | function |
Returns the value of a setting, or its default value if absent. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Returns the array of settings, including defaults for missing settings. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the list of third parties that store information. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets all third-party settings of a given module. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
protected | function | Merges default settings values into $settings. | |
PluginSettingsBase:: |
public | function |
Informs the plugin that some configuration it depends on will be deleted. Overrides PluginSettingsInterface:: |
3 |
PluginSettingsBase:: |
public | function |
Sets the value of a setting for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the settings for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Unsets a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
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. | |
TaxonomyStorages:: |
protected | property | An instance of the "entity.repository" service. | |
TaxonomyStorages:: |
protected | property | An instance of the "entity_type.manager" service. | |
TaxonomyStorages:: |
private | property | The state of whether content translation should be used. | |
TaxonomyStorages:: |
private | function | Returns the entity storage. | |
TaxonomyStorages:: |
protected | function | Returns storage of the "taxonomy_term" entities. | 1 |
TaxonomyStorages:: |
protected | function | Returns the entity translation to be used in the given context. | |
TaxonomyStorages:: |
protected | function | Returns storage of the "taxonomy_vocabulary" entities. | 1 |
TaxonomyStorages:: |
protected | function | Returns the state of whether content translation needed. |