Рейтинг:1

Ошибка при попытке просмотра ревизий

флаг do

Использование Друпал 8/9. При попытке просмотреть предыдущие версии я получаю следующую ошибку:

Ошибка: вызов функции-члена getType() для строки в clc_d8_theme_theme_suggestions_page_alter() (строка 13 файла /var/www/html/wrc/web/themes/clc_d8_theme/clc_d8_theme.theme)

Это относится к этому коду:

function clc_d8_theme_theme_suggestions_page_alter (массив & $ предложений, массив $ переменных) {
  // Добавляем предложения по типам контента.
  если ($node = \Drupal::request()->атрибуты->get('узел')) {
    array_splice($suggestions, 1, 0, 'page__node__' . $node->getType()); <-- ошибка в этой строке
  }
}

Мне нужны предложения типа для моей темы. Как я могу это исправить? Я думал, что проверки на узле будет достаточно, чтобы избежать проблем.

Рейтинг:3
флаг ve

"$узел" может немного отличаться в зависимости от контекста, но вот несколько способов установить $узел:

$routeName = \Drupal::routeMatch()->getRouteName();

$узел = NULL;

// $переменные['узел'].
если (isset($variables['узел'])) {
  $узел = $переменные['узел'];
  если (is_numeric($variables['узел'])) {
    $node = \Drupal::entityTypeManager()->getStorage('node')->load($variables['node']);
  }
}

// $переменные['строка'].
if (isset($variables['row']) && !empty($variables['row']->nid)) {
  $node = \Drupal::entityTypeManager()->getStorage('node')->load($variables['row']->nid);
}

// $routeName === 'entity.node.canonical'.
если ($ routeName === 'entity.node.canonical') {
  $node = \Drupal::routeMatch()->getParameter('node');
}

// $routeName === 'entity.node.revision'.
если ($ routeName === 'entity.node.revision') {
  $revisionId = \Drupal::routeMatch()->getParameter('node_revision');
  $node = node_revision_load($revisionId);
}

// $routeName === 'entity.node.preview'.
если ($ routeName === 'entity.node.preview') {
  $node = \Drupal::routeMatch()->getParameter('node_preview');
}

если ($ узел) {
  // запускаем ваш код...
}

В частности, похоже, что вы после:

// Получить имя маршрута.
$routeName = \Drupal::routeMatch()->getRouteName();

// Проверяем, является ли маршрут ревизией узла.
если ($ routeName === 'entity.node.revision') {
  $revisionId = \Drupal::routeMatch()->getParameter('node_revision');
  $node = node_revision_load($revisionId);
}

Это полностью загрузит ваш объект node и ->получитьтип() должно работать без ошибок.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.