web-dev-qa-db-fra.com

Modifier le format de date de l'article

Je voudrais changer le format de date utilisé pour les articles en Drupal 8. Il semble qu'il utilise le Default medium date format par défaut. J'ai ajouté mon propre format à admin/config/regional/date-time, mais je ne trouve pas où modifier le format utilisé par les articles.

Existe-t-il un moyen de le faire à partir du CMS ou cela doit-il être fait dans le code?

21
Chris

Donc, après avoir passé plus de temps que je ne veux l'admettre, j'ai trouvé deux solutions.

Solution 1

Une façon de le faire est avec la fonction de date mentionnée par darol100 dans sa réponse. Modifier son exemple pour mon cas, dans mon node--article.html.twig fichier, j'ai changé:

{% trans %}Submitted by {{ author_name }} on {{ date }}{% endtrans %}

à

{% set createdDate = node.getCreatedTime|date('j F Y') %}
{% trans %}Submitted by {{ author_name }} on {{ createdDate }} {% endtrans %}

L'avantage de cette approche est qu'elle est simple et rapide. L'inconvénient est que je n'utilise pas le système de format de date intégré de Drupal.

Solution 2

Afin d'utiliser le système de format de date de Drupal, j'ai d'abord créé mon format personnalisé à admin/config/regional/date-time. Ensuite, j'ai édité node--article.html.twig comme suit:

{% set createdDate = node.getCreatedTime|format_date('my_custom_format') %}
{% trans %}Submitted by {{ author_name }} on {{ createdDate }} {% endtrans %}

Cela suppose que j'ai nommé mon format personnalisé " Mon format personnalisé ", ce qui donne le nom de la machine my_custom_format.

Bien que cette solution nécessite une étape supplémentaire, je pense que c'est la façon la plus Drupal de le faire).

Je l'ai appris sur cette page à propos de Drupal's Twig Filters .

41
Chris

Si vous souhaitez modifier la base du format de date au niveau du type de contenu d'article. Vous pouvez modifier/ajouter le code suivant post.published_at|date et utilisez un filtre pour modifier le format de la date.

nœud - article.html.twig

{# Here are few example #}
{{ post.published_at|date(format='j  F  Y') }} {# Output = 10 March 2001#}
{{ post.published_at|date(format="F j, Y, g:i a") }} {# Output = March 10, 2001, 5:16 pm#}
{{ post.published_at|date(format='m/d/Y') }} {# Output 10/3/2001 #}

Twig utilise le même code de dénomination que format de date php . Pour plus d'informations sur twig formats de date visitez - http://twig.sensiolabs.org/doc/filters/date.html

9
itsdarrylnorris

Je suis plus pour la solution 2 de Chris. Comme il le dit IS plus la manière drupal façon ... mais ce n'est pas encore la meilleure option).

format_date () a été déprécié et sera supprimé avant Drupal 9 ... ce qui signifie qu'un jour, vous ferez une mise à jour drupal et cela se cassera) .

Au lieu de cela, il est préférable de le faire dans votre fichier .theme dans une fonction de prétraitement.

function [theme_name]_preprocess_node(&$variables) {
  $variables['date'] = \Drupal::service('date.formatter')->format($variables['node']->getCreatedTime(), 'my_custom_format');
}
8
Duke

Une observation sur ce que Duke a dit:

format_date () est obsolète et sera supprimé avant Drupal 9 ...

Oui, Drupal format_date () définie dans core/includes/common.inc est, en fait, obsolète. Mais, lorsque vous utilisez le filtre twig format_date () vous n'appelez PAS cela Drupal, au lieu de cela, vous utilisez le filtre twig défini par Drupal in TwigExtension :: getFilters () , et ce filtre appelle DateFormatter :: format () .

Par conséquent, l'utilisation du filtre twig format_date () est sûre et la solution 2 de Chris est très bien.

2
camilo.escobar

Il est également possible de trouver le format de date déjà utilisé et de simplement le changer dans l'interface utilisateur. Comparez simplement ce que vous voyez sur la page avec les formats de date dans admin/config/regional/date-time/

Si vous modifiez par exemple "Date moyenne par défaut", les dates seront modifiées en utilisant ce format sans toucher à aucun fichier de modèle/brindille.

Les formats de date peuvent également être définis/traduits par langue pour une configuration multilingue.

2
eye-wonder

Vous pouvez personnaliser le format dans node.html.twig comme ceci:

{{ node.createdtime|date(format="Y-m-d") }}
1
Henry

Vous pouvez créer votre propre champ Soumis par en utilisant Display Suite pour créer un champ de jeton.

Dans Drupal 8/structure/ds/champs

Ajoutez ensuite un champ en utilisant du HTML et des jetons comme ...

By [node:author] on [node:created:custom:F j, Y]
1
Daniel Schiavone

Vous pouvez avoir tous les formats PHP pour la date et l'heure

// Assuming today is March 10th, 2001, 5:16:18 pm, and that we are in the
// Mountain Standard Time (MST) Time Zone

date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
date("m.d.y");                         // 03.10.01
date("j, n, Y");                       // 10, 3, 2001
date("Ymd");                           // 20010310
date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
date("H:i:s");                         // 17:16:18
date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (the MySQL DATETIME format)


{% set createdDate = node.getCreatedTime|date('F j, Y, g:i a') %}
<div class="newsSingleAuthorDate">
      {% trans %}Submitted by <span>{{ author_name }}</span>  on {{ createdDate }} {% endtrans %}
</div>
0
Wasim Khan

Pour être sûr de ne modifier que les caractères de la date mais pas les éléments HTML environnants, j'utilise le crochet suivant:

function [theme_name]_preprocess_field(array &$variables) {
  if ($variables['field_name'] === 'created') {
    $timestamp = $variables['element']['#items']->value;
    $markup = \Drupal::service('date.formatter')->format($timestamp, 'html_date');
    $variables['items'][0]['content']['#markup'] = $markup;
  }
}

Remplacer [theme_name] avec le nom de votre thème et html_date avec le format d'heure souhaité, l'un de ceux que vous trouverez sous /admin/config/regional/date-time.

0
Philipp Zedler