diff --git a/includes/field_ui.inc b/includes/field_ui.inc
index 8561524c..bf613614 100644
--- a/includes/field_ui.inc
+++ b/includes/field_ui.inc
@@ -757,13 +757,18 @@ function _ds_field_ui_table_layouts($entity_type, $bundle, $view_mode, array &$f
$display = $entity_form->getEntity();
if ($display->getThirdPartySetting('ds', 'layout')) {
$layout_configuration = $display->getThirdPartySetting('ds', 'layout');
- $layout = (array) $ds_layouts[$layout_configuration['id']];
- $layout['layout'] = $layout_configuration['id'];
- $layout['disable_css'] = $layout_configuration['disable_css'];
- $layout['entity_classes'] = $layout_configuration['entity_classes'];
- $layout['settings'] = $layout_configuration['settings'] ?: [];
- $layout['regions'] = $display->getThirdPartySetting('ds', 'regions');
- $layout['fields'] = $display->getThirdPartySetting('ds', 'fields');
+ if (isset($ds_layouts[$layout_configuration['id']])) {
+ $layout = (array) $ds_layouts[$layout_configuration['id']];
+ $layout['layout'] = $layout_configuration['id'];
+ $layout['disable_css'] = $layout_configuration['disable_css'];
+ $layout['entity_classes'] = $layout_configuration['entity_classes'];
+ $layout['settings'] = $layout_configuration['settings'] ?: [];
+ $layout['regions'] = $display->getThirdPartySetting('ds', 'regions');
+ $layout['fields'] = $display->getThirdPartySetting('ds', 'fields');
+ }
+ else {
+ drupal_set_message(t('The configured layout (@layout) is missing, please select a new one', ['@layout' => $layout_configuration['id']]), 'error');
+ }
}
if (!empty($layout) && isset($layout['layout']) && isset($ds_layouts[$layout['layout']])) {
@@ -907,18 +912,21 @@ function _ds_field_ui_table_layouts_preview(array &$form, FormStateInterface $fo
$layout_string = $form_state->hasValue('ds_layout') ? $form_state->getValue('ds_layout') : $layout['layout'];
}
+ $suggestions_array = [];
+
if (!empty($layout_string)) {
- /** @var \Drupal\Core\Layout\LayoutDefinition $chosen_layout */
- $chosen_layout = $ds_layouts[$layout_string];
- $selected = '' . $chosen_layout->getLabel() . '';
- $selected .= '
' . t('The default template can be found in %path', ['%path' => $chosen_layout->getPath() . '/' . $chosen_layout->getTemplate()]);
- $suggestions_array = [];
- $suggestions_array[0] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId();
- $suggestions_array[2] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '-' . $display->getTargetBundle();
- $suggestions_array[4] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '--{id}';
- if ($display->getMode() != 'default') {
- $suggestions_array[1] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '-' . $display->getMode();
- $suggestions_array[3] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '-' . $display->getTargetBundle() . '-' . $display->getMode();
+ if (isset($ds_layouts[$layout_string])) {
+ /** @var \Drupal\Core\Layout\LayoutDefinition $chosen_layout */
+ $chosen_layout = $ds_layouts[$layout_string];
+ $selected = '' . $chosen_layout->getLabel() . '';
+ $selected .= '
' . t('The default template can be found in %path', ['%path' => $chosen_layout->getPath() . '/' . $chosen_layout->getTemplate()]);
+ $suggestions_array[0] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId();
+ $suggestions_array[2] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '-' . $display->getTargetBundle();
+ $suggestions_array[4] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '--{id}';
+ if ($display->getMode() != 'default') {
+ $suggestions_array[1] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '-' . $display->getMode();
+ $suggestions_array[3] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '-' . $display->getTargetBundle() . '-' . $display->getMode();
+ }
}
ksort($suggestions_array);
@@ -929,7 +937,7 @@ function _ds_field_ui_table_layouts_preview(array &$form, FormStateInterface $fo
$suggestions_array[$key] = $suggestion_replace . '.html.twig';
}
- if ($form_state->hasValue('ds_layout') || (!empty($layout) && isset($layout['regions']))) {
+ if ($form_state->hasValue('ds_layout') || (!empty($layout) && isset($layout['regions'])) && (!empty($chosen_layout))) {
$fallback_image = drupal_get_path('module', 'ds') . '/images/preview.png';
$current_layout = $form_state->hasValue('ds_layout') && (!isset($layout->layout) || $form_state->getValue('ds_layout') != $layout->layout) ? t('Current layout (after save)') : t('Current layout');
$image = $chosen_layout->getIconPath();