В D8 я программно создал блок и создал iFrame на основе значения базы данных. Код ниже для блока:
class GooglemapBlock extends BlockBase { /** * {@inheritdoc} */ public function build() { $build = []; //$build['googlemap_block']['#markup'] = 'Implement GooglemapBlock.'; $config = \Drupal::config('custom.default'); $build['googlemap_block']['#markup'] = drupal_set_message($config->get('google_token')); $rawTxt = $build['googlemap_block']['#markup']['status'][0]; $build['googlemap_block']['#markup'] = '<iframe src="'.$rawTxt.'" width="100%" height="100%" frameborder="0"allowfullscreen></iframe>'; return $build; } }
Затем я назначил блок в область footer_first из панели администратора.
Теперь, в page.html.twig, я использовал то же самое, что и {{ page.footer_first }}, однако, я вижу, это показывает пробел. IFrame не отображается.
page.html.twig
{{ page.footer_first }}
Значение сохраненной базы данных, которое я хочу передать в iFrame, ниже:
https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d9207.358598888495!2d-85.64847801496286!3d30.183918972289003!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0000000000000000%3A0x2320479d70eb6202!2sDillard!5e0!3m2!1sbn!2sbd!4v1462359735720
На основании ответа от https://drupal.stackexchange.com/questions/246151/iframe-not-displayed-in-drupal-8-controller-page, я сделал следующее в своем пользовательском блоке, и теперь он работает нормально:
class GooglemapBlock extends BlockBase { /** * {@inheritdoc} */ public function build() { $build = []; //$build['googlemap_block']['#markup'] = 'Implement GooglemapBlock.'; $config = \Drupal::config('custom.default'); $build['googlemap_block']['#markup'] = drupal_set_message($config->get('google_token')); $rawTxt = $build['googlemap_block']['#markup']['status'][0]; $iframe = []; $iframe = array( '#type' => 'inline_template', '#template' => '<iframe width="100%" height="100%" src="'.$rawTxt.'" frameborder="0" allowfullscreen></iframe>', //'#context' => ['url' => 'https://www.youtube.com/embed/yAoLSRbwxL8',], ); return $iframe; } }