Рейтинг:1

Скрыть панель инструментов администратора в iFrame

флаг cn

Возможно ли в Drupal 8 скрыть панель инструментов администратора, когда сайт загружается в iFrame? Например, передать аргумент? :-)

Я думал об использовании какой-то предварительной обработки на странице, которая отображается в iFrame, но это не сработает, поскольку html кэшируется Drupal. Также я думал о том, чтобы сделать это в Javascript, но я не хочу включать файл javascript на каждую страницу, кроме значения по умолчанию.

Может быть, кто-то знает hook_(), который позволит мне манипулировать css, но не кэшируется?

флаг za
Вы можете использовать другую тему для администратора/пользователя? https://www.drupal.org/project/toolbar_visibility
флаг cn
Нет, поскольку это реализация модуля contrib, я не хочу заставлять пользователей устанавливать другую тему.
Рейтинг:3
флаг cg

Я бы использовал тот же подход, что и @Hudri, и получил бы доступ к сайту как https://www.mysite.com?is_iframe=true.

Затем добавьте класс в тег body, если есть опция запроса:

/**
 * Реализует hook_preprocess_HOOK().
 */
функция MYMODULE_preprocess_html(&$variables) {
  $is_iframe = \Drupal::request()->query->get('is_iframe');
  если ($is_iframe === 'истина') {
    $variables['attributes']['class'][] = 'hide-admin-toolbar';
  }
}

Если я правильно помню, Drupal будет регенерировать HTML при доступе к https://www.mysite.com?is_iframe=true против https://www.mysite.com.


Использованная литература:

флаг bw
Отличное решение! Я предполагаю, что вы используете CSS, чтобы скрыть панель инструментов.Это может стать немного грубым, если вы также используете admin_toolbar. Другим вариантом было бы запретить его рендеринг вообще, например: `if ($is_iframe === 'true') { if (isset($variables['page_top']['toolbar'])) { unset($variables['page_top']['toolbar']); }}`
Рейтинг:2
флаг ru

Это должно быть выполнимо с контекст кеша:

Ядро Drupal уже предоставляет контекст кеша
url.query_args
который можно использовать для параметра вашего запроса, например. URL-адрес
https://www.mysite.com?is_iframe=true
будет контекст кеша
\Drupal::service('cache_context.url.query_args')->getContext('is_iframe');

Насколько я знаю, cache_context url.query_args уже включен по умолчанию в ядре Drupal, поэтому вам нужно только добавить этот контекст кеша в массив рендеринга в соответствующей функции предварительной обработки.

Обратите внимание, что контексты кеша обычно не работают с модулем Internal Page Cache!

Для производства вы должны настроить это с более конкретным, настраиваемым контекстом кеша. url.query_args: мой_query_param чтобы ограничить ненужные контексты кеша (в противном случае тупые боты могут инициировать вычисления контекста кеша gazillion)

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

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