Рейтинг:1

Как предотвратить изменение темы, вызванное $rendererService->renderPlain()

флаг ru

Я пытаюсь повторно использовать вывод сильно настроенного средства форматирования поля как <select><option> текст в веб-форме. Мне удалось повторно использовать отображение поля, но это имеет побочный эффект переключения темы, используемой для рендеринга.

Ниже приведен упрощенный код, строки $dateRenderArray = ... и $dateHtml = ... являются оригинальными и вызывают проблему:

function mymodule_webform_options_alter (массив и параметры $, элемент массива и $, идентификатор параметра $ = NULL) {
  foreach ($options as $value => $text) {
    $entity = getEntityByOption($value);

    //повторно использовать вывод средства форматирования пользовательского поля
    $dateRenderArray = $entity->get('field_daterange')->view('тизер');

    //следующая строка вызывает смену темы
    $dateHtml = \Drupal::service('рендерер')->renderPlain($dateRenderArray);

    $datePlaintext = str_replace(["\n", " "], ["", " "], trim(strip_tags($dateHtml)));
    $muchBetterOptionText = $someOtherPlaintextFromEntity. ' ' . $datePlaintext;
    $options[$value] = $muchBetterOptionText;
  }
}

Это отлично работает в форме внешнего интерфейса, для отправки электронных писем, а также в списке отправки веб-формы администратора.

Но в одном подробном представлении отправки веб-формы эти строки вызывают нежелательное изменение темы с темы администратора на тему внешнего интерфейса.

Вопрос:
Как я могу предотвратить смену темы от визуализироватьПлаин() и сохранить тему администратора при просмотре одной отправки веб-формы?

Дополнительный бонусный вопрос:
Почему мой хук корректно работает в списке отправки веб-формы, а не в подробном представлении отправки веб-формы? В списке отправки используется точно такая же функция, он отображает тот же обработанный текст параметра в соответствующем столбце, но я правильно остаюсь внутри темы администратора при просмотре списка. Но только в подробном представлении переключается на тему интерфейса.

4uk4 avatar
флаг cn
Обычно в запросе нет переключения темы. Тема согласовывается глобально для всего запроса. Я предполагаю, что есть два запроса, один из которых отображает содержимое, а другой вызывает хук. Можете ли вы проверить имена маршрутов для обоих? Если у вас есть два разных маршрута, проверьте для каждого требования для согласования темы администратора. При необходимости реализуйте собственный переговорщик для второго запроса. См. https://drupal.stackexchange.com/questions/281447/themenegotiator-not-working-for-admin-pages.
Рейтинг:1
флаг ru

его файл composer.json не требует версии библиотеки psr/log, отличной от версии, необходимой для ядра Drupal. Резервное копирование и миграция ядра библиотека включена вместе с модулем и использует ту же версию psr/log, которая требуется от ядра Drupal.).

Если вам нужно 
Резервное копирование и миграция
 модуль, вы должны использовать версию, размещенную на drupal.org, а не версию, размещенную на github.com.
Не обязательно обращаться к объекту представления ($view), чтобы получить аргументы. Вы можете проверить все аргументы, сделав это
$params = Drupal::routeMatch()->getParameters();

Обычно вы обнаружите, что если вы получаете доступ к представлению 
с контекстными фильтрами/параметрами
 будут ключи параметров "arg_0, arg_1"
var_dump ($ параметры);
// объект(Symfony\Component\HttpFoundation\ParameterBag)#323 (1) { ["parameters":protected]=> array(4) { ["view_id"]=> string(18) "sample_view" ["display_id" ]=> строка(6) "page_1" ["arg_0"]=> строка(26) "251" } }

Тогда вы можете сделать
$params = Drupal::routeMatch()->getParameter('arg_0');

Это может быть полезно для вас, если это не связано с настройкой Drupal domain_cookies. 
https://drupal.stackexchange.com/a/266928/39462
Требование 
т()
 перевести строку на определенный язык вполне нормально. Функция вернет перевод, если модуль Locale установлен и включен, и эта строка присутствует на сайте; он не использует удаленную службу для перевода строки, переданной в качестве первого аргумента.
Присутствует на сайте
 средства:
Перевод добавлен через форму в admin/config/regional/translate
Перевод был импортирован с помощью формы на странице admin/config/regional/translate/import
Файл settings.php содержит пользовательский перевод в 

$conf['locale_custom_strings_ja']

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

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