web-dev-qa-db-fra.com

Essayer de rendre un format de date personnalisé avec Twig

Je suis en train de porter l'un de mes thèmes de contribution vers Drupal 8. Pour les formats de date personnalisés sur les nœuds, j'ai quelque chose comme ça dans une fonction node_preprocess dans le fichier template.php du thème dans la version 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");

Je le rends avec le code suivant.

  <?php print $thedate; ?> / <?php print $themonth; ?> / <?php print $theyear; ?>

Dans mon Drupal 8, j'ai essayé une approche similaire dans le fichier .theme du thème, puis j'essaye de les rendre dans node.html.twig Sous la forme {{{ thedate }} / {{ themonth }} / {{ theyear }}}, Mais Je reçois une mauvaise erreur.

Twig_Error_Runtime: une exception a été levée lors du rendu d'un modèle ("L'horodatage doit être numérique.") Dans themes/mytheme/templates/page.html.twig à la ligne 210. dans Twig_Template-> displayWithErrorHandling () (ligne 279 de /site/core/vendor/twig/twig/lib/Twig/Template.php).

J'ai regardé Twig date formats , et il semble que vous devez simplement attacher une variable, telle que {{ display_submitted |date("m/d/Y") }}. J'ai essayé cela sans fonction de prétraitement mais ce qui sort est 31/12/1969 , ce qui n'est pas la date de création du nœud donc je suis un peu perdu ici.

5
Danny Englander

$node->created est un objet FieldItemList .

Vous devez utiliser l'un ou l'autre.

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

Tous les champs de base de nœuds (et la plupart des autres types d'entités, certains sont encore en cours de traitement) ont maintenant des méthodes, qui sont définies dans NodeInterface .

7
tim.plunkett

Voici une approche qui utilise juste Twig (aucune fonction de prétraitement nécessaire):

<p>{{ node.createdtime | date("d F Y") }}</p>
12
wiifm

Pour les personnes qui ont besoin d'un peu plus d'aide pour comprendre cela, ajoutez ce qui suit au fichier 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");
}

Ensuite, dans votre thème, mettez à jour le modèle twig (tel que templates/comment.html.twig) pour utiliser la variable comme suit: {{ YOUR_DATE_NAME }}

1
jimafisk