Попытка отобразить пользовательский формат даты с помощью Twig
Я в процессе переноса одной из моих тем на Drupal 8. Для пользовательских форматов дат на узлах у меня есть что-то подобное в функции node_preprocess в теме template.php файл в версии Drupal 7:
$vars['thedate'] = format_date($node->created, "custom", "j");
$vars['themonth'] = format_date($node->created, "custom", "M");
$vars['theyear'] = format_date($node->created, "custom", "Y");
Я визуализирую его с помощью следующего кода.
<?php print $thedate; ?> / <?php print $themonth; ?> / <?php print $theyear; ?>
В моем порту Drupal 8 я попробовал аналогичный подход в файле .theme темы, а затем попытался отобразить их в node.html.twig
как {{{ thedate }} / {{ themonth }} / {{ theyear }}}
, но я получаю неприятную ошибку.
twig_error_runtime: Во время отрисовки шаблона возникло исключение ("Отметка времени должна быть числовой.") в темах/мифеме/шаблонах/странице.html.ветка в строке 210. в twig_template->Отображение с ошибкой() (строка 279 из /site/core/vendor/twig/twig/lib/Twig/Template.php).
Я посмотрел на Форматы даты ветки, и, похоже, вам следует просто прикрепить переменную, такую как {{ display_submitted |date("m/d/Y") }}
. Я пробовал это без функции предварительной обработки, но какие результаты является 12/31/1969, это не дата создания узла, так что я немного заблудился здесь.
3 answers
$node->created
является объектом fielditemlist.
Вам нужно использовать любой из них.
$vars['thedate'] = format_date($node->created->value, "custom", "j");
$vars['thedate'] = format_date($node->getCreatedTime(), "custom", "j");
Все базовые поля узлов (и большинство других типов сущностей, некоторые из которых все еще разрабатываются) теперь имеют методы, которые определены в nodeInterface.
Вот подход, который использует только Twig (функции предварительной обработки не требуются):
<p>{{ node.createdtime | date("d F Y") }}</p>
Для людей, которым нужна дополнительная помощь в понимании этого, добавьте следующее в файл YOURTHEMENAME.theme:
/**
* Implements template_preprocess_comment()
*/
function YOURTHEMENAME_preprocess_comment(&$variables) {
$comment = $variables['elements']['#comment'];
$variables['YOUR_DATE_NAME'] = format_date($comment->created->value, "custom", "m / j / y");
}
Затем в своей теме обновите шаблон ветки (например, templates/comment.html.twig), чтобы использовать переменную следующим образом:
{{ YOUR_DATE_NAME }}