Skip to content

Commit 29bfd74

Browse files
committed
Added title override function and code cleanup.
1 parent 5d87d17 commit 29bfd74

File tree

6 files changed

+85
-77
lines changed

6 files changed

+85
-77
lines changed

config/schema/view_mode_selector.schema.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ field.field_settings.view_mode_selector:
1616
type: boolean
1717
hide_title:
1818
type: boolean
19+
override_title:
20+
type: string
1921
icon:
2022
type: mapping
2123
mapping:

src/Plugin/Field/FieldType/ViewModeSelectorItem.php

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public static function defaultFieldSettings() {
3434
*/
3535
public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
3636
$properties['value'] = DataDefinition::create('string')
37-
->setLabel(t('View mode'))
37+
->setLabel(\Drupal::translation()->translate('View mode'))
3838
->addConstraint('Length', ['max' => 255])
3939
->setRequired(TRUE);
4040

@@ -71,8 +71,8 @@ public function storageSettingsForm(array &$form, FormStateInterface $form_state
7171
public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
7272
$element = [];
7373
$settings = $this->getSettings();
74-
$entity_type = $this->definition->getFieldDefinition()->getTargetEntityTypeId();
75-
$bundle = $this->definition->getFieldDefinition()->getTargetBundle();
74+
$entity_type = $this->getFieldDefinition()->getTargetEntityTypeId();
75+
$bundle = $this->getFieldDefinition()->getTargetBundle();
7676

7777
// Get all view modes for the current bundle.
7878
$view_modes = \Drupal::service('entity_display.repository')->getViewModeOptionsByBundle($entity_type, $bundle);
@@ -82,7 +82,7 @@ public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
8282
$element['view_modes'] = [
8383
'#type' => 'fieldset',
8484
'#tree' => TRUE,
85-
'#title' => t('Available view modes'),
85+
'#title' => $this->t('Available view modes'),
8686
'#attributes' => ['class' => ['view-mode-selector-view-modes']],
8787
];
8888
}
@@ -93,37 +93,46 @@ public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
9393
'#default_value' => isset($settings['view_modes'][$view_mode_id]) && $settings['view_modes'][$view_mode_id]['enable'] ?: FALSE,
9494
];
9595

96-
// Allow uploading an icon and hide the title for view modes when radio widget is used.
97-
// if ($instance['widget']['type'] == 'view_mode_selector_radios') {
98-
$element['view_modes'][$view_mode_id]['prefix']['#markup'] = '<div class="settings">';
99-
100-
$element['view_modes'][$view_mode_id]['hide_title'] = [
101-
'#type' => 'checkbox',
102-
'#title' => t('Hide title'),
103-
'#default_value' => isset($settings['view_modes'][$view_mode_id]) && $settings['view_modes'][$view_mode_id]['hide_title'] ?: FALSE,
104-
'#states' => [
105-
'visible' => [
106-
'input[name="field[settings][view_modes][' . $view_mode_id . '][enable]"]' => ['checked' => TRUE],
107-
],
108-
]
109-
];
96+
$element['view_modes'][$view_mode_id]['prefix']['#markup'] = '<div class="settings">';
11097

111-
$element['view_modes'][$view_mode_id]['icon'] = [
112-
'#type' => 'managed_file',
113-
'#title' => t('Icon'),
114-
'#description' => t('An icon which can be used for a view mode preview.'),
115-
'#upload_location' => 'public://view-mode-selector/' . $entity_type,
116-
'#default_value' => isset($settings['view_modes'][$view_mode_id]) && $settings['view_modes'][$view_mode_id]['icon'] ?: 0,
117-
'#hide' => TRUE,
118-
'#states' => [
119-
'visible' => [
120-
'input[name="field[settings][view_modes][' . $view_mode_id . '][enable]"]' => ['checked' => TRUE],
121-
],
98+
$element['view_modes'][$view_mode_id]['override_title'] = [
99+
'#type' => 'textfield',
100+
'#title' => $this->t('Override title'),
101+
'#default_value' => isset($settings['view_modes'][$view_mode_id]) && $settings['view_modes'][$view_mode_id]['override_title'] ? $settings['view_modes'][$view_mode_id]['override_title'] : "",
102+
'#states' => [
103+
'visible' => [
104+
'input[name="field[settings][view_modes][' . $view_mode_id . '][enable]"]' => ['checked' => TRUE],
122105
],
123-
];
124-
$element['view_modes'][$view_mode_id]['suffix']['#markup'] = '</div>';
125-
// }
106+
],
107+
];
108+
109+
$element['view_modes'][$view_mode_id]['hide_title'] = [
110+
'#type' => 'checkbox',
111+
'#title' => $this->t('Hide title'),
112+
'#default_value' => isset($settings['view_modes'][$view_mode_id]) && $settings['view_modes'][$view_mode_id]['hide_title'] ?: FALSE,
113+
'#states' => [
114+
'visible' => [
115+
'input[name="field[settings][view_modes][' . $view_mode_id . '][enable]"]' => ['checked' => TRUE],
116+
],
117+
],
118+
];
119+
120+
$element['view_modes'][$view_mode_id]['icon'] = [
121+
'#type' => 'managed_file',
122+
'#title' => $this->t('Icon'),
123+
'#description' => $this->t('An icon which can be used for a view mode preview.'),
124+
'#upload_location' => 'public://view-mode-selector/' . $entity_type,
125+
'#default_value' => isset($settings['view_modes'][$view_mode_id]) && $settings['view_modes'][$view_mode_id]['icon'] ? $settings['view_modes'][$view_mode_id]['icon'] : 0,
126+
'#hide' => TRUE,
127+
'#states' => [
128+
'visible' => [
129+
'input[name="field[settings][view_modes][' . $view_mode_id . '][enable]"]' => ['checked' => TRUE],
130+
],
131+
],
132+
];
133+
$element['view_modes'][$view_mode_id]['suffix']['#markup'] = '</div>';
126134
}
127135
return $element;
128136
}
137+
129138
}

src/Plugin/Field/FieldWidget/ViewModeSelectorIcons.php

Lines changed: 19 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@
88
use Drupal\Core\Field\FieldItemListInterface;
99
use Drupal\Core\Form\FormStateInterface;
1010
use Drupal\Core\Render\RendererInterface;
11-
use Drupal\file\FileInterface;
1211
use Symfony\Component\DependencyInjection\ContainerInterface;
1312

1413
/**
14+
* A view mode selector icons widget.
15+
*
1516
* @FieldWidget(
1617
* id = "view_mode_selector_icons",
1718
* label = @Translation("Icons"),
@@ -21,11 +22,15 @@
2122
class ViewModeSelectorIcons extends ViewModeSelectorRadios {
2223

2324
/**
24-
* @var \Drupal\Core\Render\RendererInterface $renderer
25+
* The renderer service.
26+
*
27+
* @var \Drupal\Core\Render\RendererInterface
2528
*/
2629
protected $renderer;
2730

2831
/**
32+
* The entity type manager.
33+
*
2934
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
3035
*/
3136
protected $entityTypeManager;
@@ -34,12 +39,21 @@ class ViewModeSelectorIcons extends ViewModeSelectorRadios {
3439
* ViewModeSelectorIcons constructor.
3540
*
3641
* @param string $plugin_id
42+
* The plugin_id for the widget.
3743
* @param mixed $plugin_definition
44+
* The plugin implementation definition.
3845
* @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
46+
* The definition of the field to which the widget is associated.
3947
* @param array $settings
48+
* The widget settings.
4049
* @param array $third_party_settings
50+
* Any third party settings.
4151
* @param \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository
52+
* The entity display repository.
53+
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
54+
* The entity type manager.
4255
* @param \Drupal\Core\Render\RendererInterface $renderer
56+
* The renderer.
4357
*/
4458
public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, array $third_party_settings, EntityDisplayRepositoryInterface $entity_display_repository, EntityTypeManagerInterface $entity_type_manager, RendererInterface $renderer) {
4559
parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $third_party_settings, $entity_display_repository);
@@ -79,7 +93,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
7993
$output = [];
8094

8195
if (!empty($settings['view_modes'][$view_mode]['icon'][0])) {
82-
/** @var FileInterface $icon */
96+
/** @var \Drupal\file\FileInterface $icon */
8397
$icon = $this->entityTypeManager->getStorage('file')->load($settings['view_modes'][$view_mode]['icon'][0]);
8498

8599
if (!$icon) {
@@ -89,49 +103,12 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
89103
$render = [
90104
'#theme' => 'image',
91105
'#uri' => $icon->getFileUri(),
92-
'#alt' => t('Sample original image'),
106+
'#alt' => $this->t('Sample original image'),
93107
'#title' => $this->viewModes[$view_mode],
94108
];
95109

96110
$output[] = $this->renderer->render($render);
97111
}
98-
/*
99-
elseif (\Drupal::moduleHandler()->moduleExists('ds') && isset($ds_view_modes[$view_mode])) {
100-
$field = $items->getFieldDefinition();
101-
$entity_type = $field->getTargetEntityTypeId();
102-
$bundle = $field->getTargetBundle();
103-
104-
// When Display Suite is installed we can show a nice preview.
105-
// @todo integrate with DS regions
106-
$layout = $ds_view_modes[$view_mode]['layout'];
107-
108-
// Create a new empty entity for the preview.
109-
$entity_properties = ['type' => $entity_bundle, 'id' => FALSE];
110-
$entity = entity_create($entity_type, $entity_properties);
111-
$entity_view = entity_view($entity_type, [$entity], $view_mode);
112-
113-
// Render one field containing a placeholder <div> in every region.
114-
foreach ($layout['settings']['regions'] as $region_settings) {
115-
foreach ($region_settings as $field) {
116-
$entity_view[$entity_type][0][$field] = [
117-
'#type' => 'html_tag',
118-
'#tag' => 'div',
119-
'#value' => '',
120-
'#attributes' => ['class' => 'placeholder'],
121-
'#field_name' => $field,
122-
];
123-
124-
continue;
125-
}
126-
}
127-
128-
// Disable contextual links.
129-
$entity_view[$entity_type][0]['#contextual_links'] = FALSE;
130-
131-
// Render the preview.
132-
$output[] = drupal_render($entity_view);
133-
}
134-
*/
135112
else {
136113
$element['value'][$view_mode]['#attributes']['class'][] = 'no-preview';
137114
}
@@ -141,7 +118,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
141118
}
142119

143120
// Use the generated markup as our label value.
144-
$element['value']['#options'][$view_mode] = implode($output, '');
121+
$element['value']['#options'][$view_mode] = implode($output, NULL);
145122
}
146123

147124
return $element;

src/Plugin/Field/FieldWidget/ViewModeSelectorRadios.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
use Drupal\Core\Form\FormStateInterface;
77

88
/**
9+
* A view mode selector radios widget.
10+
*
911
* @FieldWidget(
1012
* id = "view_mode_selector_radios",
1113
* label = @Translation("Radio buttons"),

src/Plugin/Field/FieldWidget/ViewModeSelectorSelect.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66
use Drupal\Core\Form\FormStateInterface;
77

88
/**
9+
* A view mode selector select widget.
10+
*
911
* @FieldWidget(
1012
* id = "view_mode_selector_select",
1113
* label = @Translation("Select list"),
1214
* field_types = {"view_mode_selector"}
1315
* )
1416
*/
1517
class ViewModeSelectorSelect extends ViewModeSelectorWidgetBase {
18+
1619
/**
1720
* {@inheritdoc}
1821
*/
@@ -25,4 +28,5 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
2528
];
2629
return $element;
2730
}
31+
2832
}

src/Plugin/Field/FieldWidget/ViewModeSelectorWidgetBase.php

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,32 @@ abstract class ViewModeSelectorWidgetBase extends WidgetBase implements Containe
1616
/**
1717
* List of available view modes.
1818
*
19-
* @var array $viewModes
19+
* @var array
2020
*/
2121
protected $viewModes = [];
2222

2323
/**
24+
* The entity display repository.
25+
*
2426
* @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface
2527
*/
2628
protected $entityDisplayRepository;
2729

2830
/**
29-
* ViewModeSelectorWidgetBase constructor.
31+
* Constructs a WidgetBase object.
3032
*
3133
* @param string $plugin_id
34+
* The plugin_id for the widget.
3235
* @param mixed $plugin_definition
36+
* The plugin implementation definition.
3337
* @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
38+
* The definition of the field to which the widget is associated.
3439
* @param array $settings
40+
* The widget settings.
3541
* @param array $third_party_settings
42+
* Any third party settings.
3643
* @param \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository
44+
* The entity display repository.
3745
*/
3846
public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, array $third_party_settings, EntityDisplayRepositoryInterface $entity_display_repository) {
3947
parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $third_party_settings);
@@ -46,11 +54,16 @@ public function __construct($plugin_id, $plugin_definition, FieldDefinitionInter
4654
// Get all view modes for the current bundle.
4755
$view_modes = $this->entityDisplayRepository->getViewModeOptionsByBundle($entity_type, $bundle);
4856

49-
// Reduce options by enabled view modes
57+
// Reduce options by enabled view modes.
5058
foreach (array_keys($view_modes) as $view_mode) {
5159
if (isset($field_settings['view_modes'][$view_mode]['enable']) && $field_settings['view_modes'][$view_mode]['enable']) {
60+
if (isset($field_settings['view_modes'][$view_mode]['override_title']) && strlen($field_settings['view_modes'][$view_mode]['override_title']) > 0) {
61+
$view_modes[$view_mode] = $field_settings['view_modes'][$view_mode]['override_title'];
62+
}
63+
5264
continue;
5365
}
66+
5467
unset($view_modes[$view_mode]);
5568
}
5669

@@ -68,4 +81,5 @@ public function __construct($plugin_id, $plugin_definition, FieldDefinitionInter
6881
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
6982
return new static($plugin_id, $plugin_definition, $configuration['field_definition'], $configuration['settings'], $configuration['third_party_settings'], $container->get('entity_display.repository'));
7083
}
84+
7185
}

0 commit comments

Comments
 (0)