Я хочу, чтобы весь контент создавался с использованием моей основной темы сайта. Я хочу сделать это, потому что я использую рендерер в MYMODULE_node_presave()
как это:
функция MYMODULE_node_presave (NodeInterface $ node) {
$renderer = \Drupal::service('renderer');
$content_type = $node->getType();
если ($content_type == 'страница') {
$viewmode_render = $node->get('field_text_main_to_render')
-> представление ('рендеринг_выход');
$processed_display = $renderer->renderPlain($viewmode_render);
$node->set('field_text_main_display', "$processed_display");
$node->field_text_main_display->format = 'обработано';
}
Мой сайт использует Bartik в качестве основной темы и Seven в качестве темы администратора.
В настройках внешнего вида (/admin/appearance) я проверил предпочтение Используйте тему администрирования при редактировании или создании контента. Это гарантирует, что узлы отображаются в Bartik при создании в пользовательском интерфейсе.
Однако, когда я повторно сохраняю узлы на /админ/контент
, ноды пересохраняются с помощью Seven, вместо Bartik. Поэтому я добавил Тема Negotiator
:
/**
* Выберите правильную тему для различных маршрутов.
*/
класс ThemeNegotiator реализует ThemeNegotiatorInterface {
/**
* {@inheritDoc}
*/
применяется публичная функция (RouteMatchInterface $route_match) {
вернуть $this->negotiateRoute($route_match)? ИСТИНА: ЛОЖЬ;
}
/**
* {@inheritDoc}
*/
общедоступная функция defineActiveTheme (RouteMatchInterface $ route_match) {
вернуть $this->negotiateRoute($route_match) ?: NULL;
}
/**
* Выберите тему для особых случаев.
*
* @param \Drupal\Core\Routing\RouteMatchInterface $route_match
* Текущий маршрут.
*
* @return bool|строка
* Имя темы для использования (строка) или ложь (bool).
*/
частная функция переговоров по маршруту (RouteMatchInterface $ route_match) {
$route_name = $route_match->getRouteName();
// Страница содержимого администратора должна использовать тему рендеринга узла.
// Почему: Действие "Сохранить контент" будет использовать тему этой страницы.
если ($ route_name === 'system.admin_content') {
вернуть «бартик»;
}
еще {
вернуть ЛОЖЬ;
}
}
}
Теперь, когда я запускаю массовое повторное сохранение узла на /админ/контент
, узлы корректно отображаются с помощью Bartik.
Далее я установил Фиды модуль. Теперь, когда я импортирую узлы через CSV с помощью Feeds, они отображаются с помощью Seven, а не Bartik. Я хочу, чтобы эти узлы также отображались с помощью Bartik, но я не знаю, как это сделать. (Например, если бы был способ использовать договоритьсяМаршрут
в Тема Negotiator
, это было бы хорошо, но я не знаю, как это настроить.) Есть идеи?