Попытка отобразить пользовательский формат даты с помощью 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, это не дата создания узла, так что я немного заблудился здесь.

Author: kiamlaluno, 2013-11-26

3 answers

$node->created является объектом fielditemlist.

Вам нужно использовать любой из них.

$vars['thedate'] = format_date($node->created->value, "custom", "j");
$vars['thedate'] = format_date($node->getCreatedTime(), "custom", "j");

Все базовые поля узлов (и большинство других типов сущностей, некоторые из которых все еще разрабатываются) теперь имеют методы, которые определены в nodeInterface.

 7
Author: tim.plunkett, 2016-12-28 10:23:07

Вот подход, который использует только Twig (функции предварительной обработки не требуются):

<p>{{ node.createdtime | date("d F Y") }}</p>
 13
Author: wiifm, 2016-03-16 10:31:29

Для людей, которым нужна дополнительная помощь в понимании этого, добавьте следующее в файл 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 }}

 1
Author: jimafisk, 2016-01-11 19:18:52