Здравствуйте, я создал форму, и хочу заняться ее темизацией, создал файл ss.theme, и прописал там так:
<?php
function ss_theme() {
return [
'page--contact--form-about' => [
'variables' => [
'items' => null
],
'template' => 'form-about'
]
];
}
?>
Но страница возвращает "The website encountered an unexpected error. Please try again later."
Подскажите, может я не правильно указал id формы
Комментарии
Смотрите журнал друпала после ошибки, он напишет что именно вы сделали не так
А twig debug включали? Может ядро само предлагает такой шаблон использовать и нет необходимости его прописывать вручную?
включал, но до конца не понял, https://prnt.sc/r4fm6x
Вот что за ошибка:
#0 W:\domains\ss\core\lib\Drupal\Core\Session\SessionManager.php(164): Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage->start()
#1 W:\domains\ss\core\lib\Drupal\Core\Session\SessionManager.php(118): Drupal\Core\Session\SessionManager->startNow()
#2 W:\domains\ss\vendor\symfony\http-foundation\Session\Session.php(57): Drupal\Core\Session\SessionManager->start()
#3 W:\domains\ss\core\modules\big_pipe\src\Render\BigPipe.php(240): Symfony\Component\HttpFoundation\Session\Session->start()
#4 W:\domains\ss\core\modules\big_pipe\src\Render\BigPipe.php(295): Drupal\big_pipe\Render\BigPipe->performPreSendTasks()
#5 W:\domains\ss\core\modules\big_pipe\src\Render\BigPipeResponse.php(112): Drupal\big_pipe\Render\BigPipe->sendContent(Object(Drupal\big_pipe\Render\BigPipeResponse))
#6 W:\domains\ss\vendor\symfony\http-foundation\Response.php(374): Drupal\big_pipe\Render\BigPipeResponse->sendContent()
#7 W:\domains\ss\index.php(20): Symfony\Component\HttpFoundation\Response->send()
#8 {main}
С файлом разобрался, и правда там было указано какой файл нужно создать, только теперь вопрос как это расписать? какую переменную использовать? я так написал:
<header>
{{ form.element1 }}
{{ form.element2 }}
</header>
{{ form.without('element1', 'element2') }}
</form>
и пусто
Нужно скопировать содержимое шаблона из базового шаблона, а потом уже редактировать
а где находиться базовый шаблон?
Путь к нему прописан все там же в twig debug. Это тот шаблон, который друпал предлагает по умолчанию
нашел, вот как прописано в базовом шаблоне:
/**
* @file
* Theme override for a 'form' element.
*
* Available variables
* - attributes: A list of HTML attributes for the wrapper element.
* - children: The child elements of the form.
*
* @see template_preprocess_form()
*/
#}
<form{{ attributes }}>
{{ children }}
</form>
я прописал у себя в файле page--contact--form-about.html.twig так :
{{ children }}
</form>
Но он не выводит ничего
Кэш друпала сбрасываете? Для смены шаблона это обязательно
да, он выводит только тег form, https://prnt.sc/r4ljqn
вывел контактную форму в блоке с помощью модуля https://www.drupal.org/project/contact_block, но вопрос все равно, как к примеру поля input обернуть в блок с классом input-box, заголовок вывести в теге h4 а не h2?
Изменить шаблон формы
а можно ли как-нибудь в hook_form_alter изменить текст кнопки submit? сейчаст там "Отправить сообщение", а мне нужно просто "Отправить"
Да. Если у вас именно форма, то этим хуком ее можно менять как угодно
Не подскажите как? я только смог найти как убрать кнопку "Предпросмотр":
<?php
$form['actions']['preview']['#access'] = FALSE;
?>
А то найти не смог
Подскажу, но не раньше чем через часа три
Хорошо, спасибо, жду
В идеале, конечно, научиться пользоваться отладчиком xdebug. Но попробуем старые дедовские способы отладки. Установите модуль devel. Включите его и его субмодуль Devel Kint. Затем в вашем hook_form_alter напишите
или
Если сайт не упадет от нехватки памяти, то вы сможете изучить ваш массив формы и найти там нужный элемент который хотите изменить изменить. Останется только написать код как вы это делали с кнопкой предпросмотр
Возможно потребуется сброс кэша друпала
Понял, спасибо, завтра попробую и отпишусь