Cambia il formato della data dell'articolo


21

Vorrei cambiare il formato della data utilizzato per gli articoli in Drupal 8. Sembra che utilizzi il Default medium dateformato per impostazione predefinita. Ho aggiunto il mio formato admin/config/regional/date-time, ma non riesco a trovare dove modificare il formato utilizzato dagli articoli.

C'è un modo per farlo dal CMS o questo deve essere fatto nel codice?

Risposte:


41

Quindi, dopo aver trascorso più tempo di quello che mi interessa ammettere di aver esaminato questo, ho trovato due soluzioni a questo.

Soluzione 1

Un modo per farlo è con la funzione data che darol100 ha menzionato nella sua risposta. Modificando il suo esempio per il mio caso, nel mio node--article.html.twigfile, ho cambiato:

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

a

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

Il vantaggio di questo approccio è che è facile e veloce. Lo svantaggio è che non sto usando il sistema di formattazione della data integrato di Drupal.

Soluzione 2

Per poter utilizzare il sistema di formattazione della data di Drupal, ho prima creato il mio formato personalizzato su admin/config/regional/date-time. Quindi ho modificato node--article.html.twigcome segue:

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

Ciò presuppone che abbia chiamato il mio formato personalizzato " My Custom Format ", che risulta nel nome della macchina my_custom_format.

Sebbene questa soluzione richieda un ulteriore passaggio, ritengo sia il modo più Drupal di farlo.

L'ho imparato in questa pagina sui filtri Twig di Drupal .


9

Se si desidera modificare il formato della data in base al livello del tipo di contenuto dell'articolo. È possibile modificare / aggiungere il seguente codice post.published_at|datee utilizzare un filtro per modificare il formato della data.

nodo - 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 usa lo stesso codice di denominazione del formato data php . Per ulteriori informazioni sui formati di data del ramoscello, visitare: http://twig.sensiolabs.org/doc/filters/date.html


1
Sfogliato! darol100, questo può essere fatto nei file TPL allo stesso modo per qualcuno con il sito Drupal 7?
JohnDoea,

1
Sì, ma utilizza il modello PHP anziché la sintassi del ramoscello. Dovrebbe apparire qualcosa anche questo <?php print format_date($node->created, 'custom', 'm/d/y'); ?>.
itsdarrylnorris,

Grazie darol100, questo è stato molto utile per aiutarmi a conoscere i filtri Twig. Alla fine, tuttavia, sono andato con l'uso del filtro format_date fornito da Drupal (come mostro nella mia risposta).
Chris,

8

Sono più per la soluzione di Chris 2. Come dice che è più il modo drupal ... ma non è ancora l'opzione migliore.

format_date () è stato deprecato e verrà rimosso prima di Drupal 9 ... il che significa che un giorno eseguirai un aggiornamento drupal e questo si interromperà.

Invece, è meglio farlo nel tuo file .theme in una funzione di preelaborazione.

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

2

Un'osservazione su ciò che ha detto Duke:

format_date () è stato deprecato e verrà rimosso prima di Drupal 9 ...

Sì, la funzione Drupal format_date () definita in core / Includes / common.inc è, di fatto, obsoleta. Ma quando usi il filtro ramoscello format_date () NON stai chiamando quella funzione Drupal, invece di usare il filtro ramoscello definito da Drupal in TwigExtension :: getFilters () e questo filtro chiama DateFormatter :: format () .

Quindi, usare il filtro ramoscello format_date () è sicuro e la soluzione 2 di Chris va bene.


2

È anche possibile trovare il formato della data già in uso e modificarlo nell'interfaccia utente. Confronta ciò che vedi nella pagina con i formati di data inadmin/config/regional/date-time/

Se si cambia ad es. "Data media predefinita", le date verranno modificate utilizzando questo formato senza toccare alcun file modello / ramoscello.

I formati di data possono anche essere impostati / tradotti per lingua per l'impostazione multilingue.


Questa è la risposta migliore!
sudoman,

1

È possibile creare il proprio campo Inviato da utilizzando Display Suite per creare un campo token.

In Drupal 8 / struttura / ds / campi

Quindi aggiungi un campo usando html e token come ...

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

1

Puoi personalizzare il formato in node.html.twig in questo modo:

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

0

Puoi avere tutti i formati PHP per data e ora

// 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

Per essere sicuro di cambiare solo i caratteri della data ma non gli elementi HTML circostanti, utilizzo il seguente hook:

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;
  }
}

Sostituisci [theme_name]con il nome del tema e html_datecon il formato dell'ora desiderato, uno di quelli che trovi sotto /admin/config/regional/date-time.


-1

Ho usato il seguente codice per il nodo - articolo - full.html.twig:

<li class="post-date">
    {% set day = node.createdtime|date("d") %}
      <span class="day">{{ day }}</span>
    {% set month = node.createdtime|date("M") %}
        <span class="month">{{ month }}</span>
 </li>


{% set date = node.createdtime|date("M d, Y") %}
   <span>{{ date }}</span>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.