Как в своём модуле в Д8 вернуть шаблон без родительских

Главные вкладки

Аватар пользователя ХулиGUN ХулиGUN 1 декабря 2016 в 4:42
1

Не могу найти нужных доков.
Задача:
Нужна страница со сферической вакуумной формой-фильтром и таким же сферическим списком списком результатов. Блок с результатами должен аяксом обновляться при сабмите этой самой формы.
Как я вижу решение:

  1. Создать модуль с контроллером
  2. Прописать роуты или роут(если в методе сделать проверку, что реквест пришёл через аякс)
  3. Создать 2 шаблона:
    1. Шаблон для списка результатов
    2. Шаблон для всего контента(форма + инклуд первого шаблона)
  4. Написать js, который будет обрабатывать сабмит формы, аяксом слать запросы на нужный роут и возвращать первый шаблон с результатами

В чём проблема:
Дело в том, что рендерится вся цепочка шаблонов. То есть page.html.twig->my_module_template.html.twig

Собственно вопрос: Как мне избавиться при рендере от этого page.html.twig?

Лучший ответ

Аватар пользователя negociant negociant 1 декабря 2016 в 14:23
1
<?php

/**
 * @file
 * Contains \Drupal\demo\Controller\DemoController.
 */

namespace Drupal\demo\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Render\RendererInterface;
use Symfony\Component\HttpFoundation\Response;

/**
 * DemoController.
 */

class DemoController extends ControllerBase {

  /**
   * @var \Drupal\Core\Render\RendererInterface
   */

  protected $renderer;
 
  /**
   * Class constructor.
   */

  public function __construct(RendererInterface $renderer) {
    $this->renderer = $renderer;
  }
 
  /**
   * {@inheritdoc}
   */

  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('renderer')
    );
  }
 
  /**
   * Generates an example page.
   */

  public function demo() {
    $form = [
      '#theme' => 'myform',
    ];
    $rendered_form = $this->renderer->render($form);
    $response = new Response($rendered_form);
    return $response;
  }
}

импорт ContainerInterface не пропускает фильтр матерных слов - конструкцию use для ContainerInterface я думаю сами допишите

Далее собственно реализуем hook_theme для myform и соответственно шаблон myform.html.twig, роут тоже я думаю создадите

Комментарии

Аватар пользователя negociant negociant 1 декабря 2016 в 14:23
1
<?php

/**
 * @file
 * Contains \Drupal\demo\Controller\DemoController.
 */

namespace Drupal\demo\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Render\RendererInterface;
use Symfony\Component\HttpFoundation\Response;

/**
 * DemoController.
 */

class DemoController extends ControllerBase {

  /**
   * @var \Drupal\Core\Render\RendererInterface
   */

  protected $renderer;
 
  /**
   * Class constructor.
   */

  public function __construct(RendererInterface $renderer) {
    $this->renderer = $renderer;
  }
 
  /**
   * {@inheritdoc}
   */

  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('renderer')
    );
  }
 
  /**
   * Generates an example page.
   */

  public function demo() {
    $form = [
      '#theme' => 'myform',
    ];
    $rendered_form = $this->renderer->render($form);
    $response = new Response($rendered_form);
    return $response;
  }
}

импорт ContainerInterface не пропускает фильтр матерных слов - конструкцию use для ContainerInterface я думаю сами допишите

Далее собственно реализуем hook_theme для myform и соответственно шаблон myform.html.twig, роут тоже я думаю создадите