Pregunta:
Estoy en el proceso de migrar uno de mis temas contrib a Drupal 8. Para formatos de fecha personalizados en nodos, tengo algo como esto en una función node_preprocess en el archivo template.php del tema en la versión 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");
Lo renderizo con el siguiente código.
<?php print $thedate; ?> / <?php print $themonth; ?> / <?php print $theyear; ?>
En mi puerto de Drupal 8, probé un enfoque similar en el archivo .theme del tema y luego intenté representarlos en node.html.twig
como {{{ thedate }} / {{ themonth }} / {{ theyear }}}
, pero recibo un error desagradable.
Twig_Error_Runtime: Se ha lanzado una excepción durante la renderización de una plantilla ("La marca de tiempo debe ser numérica") en themes / mytheme / templates / page.html.twig en la línea 210. en Twig_Template-> displayWithErrorHandling () (línea 279 de /site/core/vendor/twig/twig/lib/Twig/Template.php).
Miré los formatos de fecha de Twig , y parece que simplemente debería adjuntar una variable, como {{ display_submitted |date("m/d/Y") }}
. Intenté eso sin una función de preproceso, pero el resultado es 31/12/1969 , que no es la fecha en que se creó el nodo, así que estoy un poco perdido aquí.
Respuesta:
$node->created
es un objeto FieldItemList .
Debe utilizar cualquiera de estos.
$vars['thedate'] = format_date($node->created->value, "custom", "j");
$vars['thedate'] = format_date($node->getCreatedTime(), "custom", "j");
Todos los campos base de nodos (y la mayoría de los otros tipos de entidades, algunos aún se están trabajando) tienen métodos ahora, que están definidos en NodeInterface .