Заметки по Drupal 8

Опубликовано 2016.08.26

Получить строчку из таблицы config
  1. //например конфиг block.block.bartik_tools
  2.  
  3. //вытянет всё
  4. $conf = \Drupal::config('block.block.bartik_tools')->get();
  5.  
  6. //покажет только элемент 'region'
  7. $conf = \Drupal::config('block.block.bartik_tools')->get('region');
  8.  
  9. //посмотреть
  10. kint($conf);
Программный вывод блока
  1. //id блока. Например system_powered_by_block,shortcuts или search_form_block
  2. $bid = 'system_powered_by_block';
  3. $block_manager = \Drupal::service('plugin.manager.block');
  4. $config = array();
  5. $plugin_block = $block_manager->createInstance($bid, $config);
  6. $render = $plugin_block->build();
  7. $render = \Drupal::service('renderer')->render($render, FALSE);//отрендеренная вёрстка
  8. $block = [
  9. '#type' => 'markup',
  10. '#markup' => $render,
  11. ];
  12. return $block;
Передать в markup блока вёрстку:
  1. //не забываем
  2. use Drupal\Component\Render\FormattableMarkup;
  3.  
  4.  
  5. //Далее в классе
  6. public function build() {
  7. $fm = new FormattableMarkup('<div style="@style">' . $my_html . '</div>', ['@style' => 'border: 1px solid black;']);
  8. $block = [
  9. '#type' => 'markup',
  10. '#markup' => $fm,
  11. ];
  12. return $block;
  13. }
  14. //стиль передавать именно через @, а не через :
Если нужно не возвращать из контроллера массив, который будет отрендерен, а отрендерить его ещё в контроллере - то можно сделать это так.
  1. $return = [
  2. '#theme' => 'geo_fields_popup',
  3. '#articles' => $variable,
  4. ];
  5.  
  6. $html = theme_render_and_autoescape($return);