class SwitchField in Display Suite 8.4
Same name and namespace in other branches
- 8.2 modules/ds_extras/src/Plugin/DsField/SwitchField.php \Drupal\ds_extras\Plugin\DsField\SwitchField
- 8.3 modules/ds_extras/src/Plugin/DsField/SwitchField.php \Drupal\ds_extras\Plugin\DsField\SwitchField
Plugin that generates a link to switch view mode with via ajax.
Plugin annotation
@DsField(
id = "switch_field",
title = @Translation("Switch field"),
entity_type = "node"
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\ds\Plugin\DsField\DsFieldBase implements ConfigurableInterface, DependentPluginInterface, DsFieldInterface
- class \Drupal\ds_extras\Plugin\DsField\SwitchField
- class \Drupal\ds\Plugin\DsField\DsFieldBase implements ConfigurableInterface, DependentPluginInterface, DsFieldInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of SwitchField
File
- modules/
ds_extras/ src/ Plugin/ DsField/ SwitchField.php, line 22
Namespace
Drupal\ds_extras\Plugin\DsFieldView source
class SwitchField extends DsFieldBase {
/**
* The EntityDisplayRepository service.
*
* @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface
*/
protected $entityDisplayRepository;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* Constructs a Display Suite field plugin.
*/
public function __construct($configuration, $plugin_id, $plugin_definition, EntityDisplayRepositoryInterface $entity_display_repository, EntityTypeManagerInterface $entity_type_manager) {
$this->entityDisplayRepository = $entity_display_repository;
$this->entityTypeManager = $entity_type_manager;
parent::__construct($configuration, $plugin_id, $plugin_definition);
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('entity_display.repository'), $container
->get('entity_type.manager'));
}
/**
* {@inheritdoc}
*/
public function build() {
$settings = $this
->getConfiguration();
if (!empty($settings)) {
/* @var \Drupal\Core\Entity\EntityInterface $entity */
$entity = $this
->entity();
// Basic route parameters.
$route_parameters = [
'entityType' => $entity
->getEntityTypeId(),
'entityId' => $entity
->id(),
];
$selector = $this
->viewMode() == 'default' ? 'full' : $this
->viewMode();
// Basic route options.
$route_options = [
'query' => [
'selector' => 'view-mode-' . $selector,
],
'attributes' => [
'class' => [
'use-ajax',
],
],
];
foreach ($settings['vms'] as $key => $value) {
// If the label is empty, do not create a link.
if (!empty($value)) {
$route_parameters['viewMode'] = $key == 'default' ? 'full' : $key;
$url = Url::fromRoute('ds_extras.switch_view_mode', $route_parameters, $route_options);
$items[] = Link::fromTextAndUrl($value, $url)
->toString();
}
}
}
$output = [];
if (!empty($items)) {
$output = [
'#theme' => 'item_list',
'#items' => $items,
// Add the AJAX library to the field for inline switching support.
'#attached' => [
'library' => [
'core/drupal.ajax',
],
],
];
}
return $output;
}
/**
* {@inheritdoc}
*/
public function settingsForm($form, FormStateInterface $form_state) {
$entity_type = $this
->getEntityTypeId();
$bundle = $this
->bundle();
$view_modes = $this->entityDisplayRepository
->getViewModes($entity_type);
$form['info'] = [
'#markup' => $this
->t('Enter a label for the link for the view modes you want to switch to.<br />Leave empty to hide link. They will be localized.'),
];
$config = $this
->getConfiguration();
$config = isset($config['vms']) ? $config['vms'] : [];
foreach ($view_modes as $key => $value) {
$entity_display = $this->entityTypeManager
->getStorage('entity_view_display')
->load($entity_type . '.' . $bundle . '.' . $key);
if (!empty($entity_display)) {
if ($entity_display
->status()) {
$form['vms'][$key] = [
'#type' => 'textfield',
'#default_value' => isset($config[$key]) ? $config[$key] : '',
'#size' => 20,
'#title' => Html::escape($value['label']),
];
}
}
}
return $form;
}
/**
* {@inheritdoc}
*/
public function settingsSummary($settings) {
$entity_type = $this
->getEntityTypeId();
$bundle = $this
->bundle();
$settings = isset($settings['vms']) ? $settings['vms'] : [];
$view_modes = $this->entityDisplayRepository
->getViewModes($entity_type);
$summary = [];
$summary[] = 'View mode labels';
foreach ($view_modes as $key => $value) {
$entity_display = $this->entityTypeManager
->getStorage('entity_view_display')
->load($entity_type . '.' . $bundle . '.' . $key);
if (!empty($entity_display)) {
if ($entity_display
->status()) {
$label = isset($settings[$key]) ? $settings[$key] : $key;
$summary[] = $key . ' : ' . $label;
}
}
}
return $summary;
}
/**
* {@inheritdoc}
*/
public function isAllowed() {
if (\Drupal::config('ds_extras.settings')
->get('switch_field')) {
return TRUE;
}
return FALSE;
}
}
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 | |
DsFieldBase:: |
public | function |
Gets the current bundle. Overrides DsFieldInterface:: |
|
DsFieldBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
|
DsFieldBase:: |
public | function |
Gets default configuration for this plugin. Overrides ConfigurableInterface:: |
5 |
DsFieldBase:: |
public | function |
Gets the current entity. Overrides DsFieldInterface:: |
|
DsFieldBase:: |
public | function |
Returns a list of possible formatters for this field. Overrides DsFieldInterface:: |
3 |
DsFieldBase:: |
public | function |
Gets this plugin's configuration. Overrides ConfigurableInterface:: |
1 |
DsFieldBase:: |
public | function |
Gets the current entity type. Overrides DsFieldInterface:: |
|
DsFieldBase:: |
public | function |
Gets the field configuration. Overrides DsFieldInterface:: |
|
DsFieldBase:: |
public | function |
Gets the field name. Overrides DsFieldInterface:: |
|
DsFieldBase:: |
public | function |
Returns the title of the field. Overrides DsFieldInterface:: |
1 |
DsFieldBase:: |
public | function |
Defines if we are dealing with a multivalue field. Overrides DsFieldInterface:: |
1 |
DsFieldBase:: |
public | function |
Sets the configuration for this plugin instance. Overrides ConfigurableInterface:: |
1 |
DsFieldBase:: |
public | function |
Gets the view mode. Overrides DsFieldInterface:: |
|
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. | |
SwitchField:: |
protected | property | The EntityDisplayRepository service. | |
SwitchField:: |
protected | property | The entity type manager. | |
SwitchField:: |
public | function |
Renders a field. Overrides DsFieldBase:: |
|
SwitchField:: |
public static | function |
Creates an instance of the plugin. Overrides DsFieldBase:: |
|
SwitchField:: |
public | function |
Returns if the field is allowed on the field UI screen. Overrides DsFieldBase:: |
|
SwitchField:: |
public | function |
The form that holds the settings for this plugin. Overrides DsFieldBase:: |
|
SwitchField:: |
public | function |
Returns the summary of the chosen settings. Overrides DsFieldBase:: |
|
SwitchField:: |
public | function |
Constructs a Display Suite field plugin. Overrides DsFieldBase:: |