Рейтинг:1

Создание собственного шаблона и переменных в модуле

флаг cn

Я работаю с D8 и обычно не использую темы, поэтому я застрял на одной проблеме.

У меня есть собственный маршрут в пользовательском модуле, который вызывает метод checkinConfirmation() на контроллере.

Внутри этого контроллера у меня есть это:

общедоступная функция checkinConfirmation() {
  $выход['элементы'] = [
    '#тип' => 'набор полей',
    '#title' => t('Проверено'),
  ];
  $output['элементы']['имя'] = [
    '#префикс' => '<h2>',
    '#суффикс' => '</h2>',
    '#markup' => t('Имя'),
  ];
  $output['#theme'] = 'circulation_confirmation';
  $выход['#выход'] = $выход;

  вернуть $ вывод;
}

и внутри моей темы у меня есть это внутри hook_theme()

публичная функция mytheme_theme() {
  $ тема ['circulation_confirmation'] = [
    'template' => 'страница/тираж -- подтверждение',
    'переменные' => [
      'выход' => [],
    ],
  ];
}

В моем шаблоне есть {{ вывод }} переменная для печати визуализированного вывода, полученного из $output. Проблема в том, что я не получаю элементы в шаблоне, и я не могу понять, почему. Шаблон подтягивается, так как обертка в файле шаблона применяется на странице, а основной контейнер имеет ширину, которой он должен быть.

При использовании этого вместо этого (в контроллере):

возвращаться [
  '#theme' => 'circulation_confirmation',
  '#output' => $выход,
];

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

Обычно я не создаю темы или шаблоны, и когда я это делаю, обычно это формы, поэтому я могу просто передать им «элемент рендеринга» => «форма», чтобы он передал элементы формы в тему. Я не уверен, что я делаю неправильно.

Пожалуйста помоги?

Rainer Feike avatar
флаг in
Вы не должны делать этого: $output['#output'] = $output; Но попробуйте добавить '#type' => 'markup' к вашей #markup - items
Ex0r avatar
флаг cn
Это ничего не изменило. Кроме того, набор полей также не втягивается.
beltouche avatar
флаг cn
У вас есть одно подчеркивание в return['#theme'], но двойной дефис в имени шаблона.
Рейтинг:0
флаг in

Вы можете попробовать это:

В вашем custom_module.module:

функция custom_module_theme() {
    возвращаться [
        'circulation_confirmation' => [
            'рендерить элемент' => 'вывод',
            'переменные' => [
                'выход' => [],
            ],
        ],
    ];

И в вашем контроллере:

общедоступная функция checkinConfirmation() {
    $ртн = [
        '#theme' => 'circulation_confirmation',
        '#выход' => [],
    ];

    $rtn['#output']['items'] = [
        '#тип' => 'набор полей',
        '#title' => t('Проверено'),
    ];

    $rtn['#output']['items']['name'] = [
        '#префикс' => '<h2>',
        '#суффикс' => '</h2>',
        '#markup' => t('Имя'),
    ];

    вернуть $rtn;
}

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

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