Alterar o formato da data do artigo

21

Gostaria de alterar o formato da data usado nos artigos do Drupal 8. Parece que ele usa o Default medium dateformato por padrão. Adicionei meu próprio formato em admin/config/regional/date-time, mas não consigo encontrar onde editar o formato usado pelos artigos.

Existe uma maneira de fazer isso no CMS ou isso precisa ser feito no código?

Chris
fonte

Respostas:

41

Então, depois de passar mais tempo do que gostaria de admitir, resolvi duas soluções para isso.

Solução 1

Uma maneira de fazer isso é com a função de data que Darol100 mencionou em sua resposta. Modificando o exemplo dele para o meu caso, no meu node--article.html.twigarquivo, mudei:

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

para

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

A vantagem dessa abordagem é que é fácil e rápido. A desvantagem é que não estou usando o sistema de formato de data interno do Drupal.

Solução 2

Para usar o sistema de formato de data do Drupal, criei meu formato personalizado em admin/config/regional/date-time. Então editei da node--article.html.twigseguinte maneira:

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

Isso pressupõe que eu nomeei meu formato personalizado " Meu formato personalizado ", o que resulta no nome da máquina my_custom_format.

Embora essa solução exija uma etapa extra, sinto que é a maneira mais Drupal de fazer isso.

Eu aprendi sobre isso nesta página sobre os filtros Twig do Drupal .

Chris
fonte
9

Se você deseja alterar o formato da data com base no nível do tipo de conteúdo do artigo. Você pode editar / adicionar o código a seguir post.published_at|datee usar um filtro para alterar o formato da data.

nó - 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 o mesmo código de nomeação que o formato de data php . Para obter mais informações sobre formatos de data do galho, visite - http://twig.sensiolabs.org/doc/filters/date.html

itsdarrylnorris
fonte
1
Thumbed up! darol100, Isso pode ser feito em arquivos TPL da mesma maneira para alguém com o site Drupal 7?
precisa saber é o seguinte
1
Sim, mas usa o modelo PHP em vez da sintaxe de galho. Deve parecer algo também isso <?php print format_date($node->created, 'custom', 'm/d/y'); ?>.
itsdarrylnorris
Obrigado darol100, isso foi bastante útil para me ajudar a aprender sobre os filtros Twig. Por fim, porém, continuei usando o filtro format_date que o Drupal fornece (como mostro na minha resposta).
Chris
8

Sou a favor da solução 2. de Chris. Como ele diz, é mais o caminho drupal ... mas ainda não é a melhor opção.

format_date () foi descontinuado e será removido antes do Drupal 9 ... o que significa que um dia você fará uma atualização do drupal e isso será interrompido.

Em vez disso, é melhor fazer isso no seu arquivo .theme em uma função de pré-processo.

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

Uma observação sobre o que Duke disse:

format_date () foi descontinuado e será removido antes do Drupal 9 ...

Sim, a função Drupal format_date () definida no core / includes / common.inc está, de fato, obsoleta. Mas, quando você usa o filtro twig format_date (), NÃO está chamando essa função Drupal, em vez de usar o filtro twig definido por Drupal em TwigExtension :: getFilters () , e esse filtro chama DateFormatter :: format () .

Portanto, o uso do filtro de formato format_date () é seguro e a solução 2 de Chris está correta .

camilo.escobar
fonte
2

Também é possível definir o formato da data já em uso e apenas alterá-lo na interface do usuário. Basta comparar o que você vê na página com os formatos de data emadmin/config/regional/date-time/

Se você alterar, por exemplo, "Data média padrão", as datas serão alteradas usando este formato sem tocar em nenhum arquivo de modelo / galho.

Os formatos de data também podem ser definidos / traduzidos por idioma para a configuração de vários idiomas.

maravilha
fonte
Esta é a melhor resposta!
sudoman 6/08
1

Você pode criar seu próprio campo Enviado por usando o Display Suite para criar um campo Token.

No Drupal 8 / estrutura / ds / campos

Em seguida, adicione um campo usando html e tokens como ...

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

Você pode personalizar o formato em node.html.twig assim:

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

Você pode ter todos os formatos PHP para Data e Hora

// 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>
Wasim Khan
fonte
0

Para ter certeza de alterar apenas os caracteres da data, mas não os elementos HTML circundantes, use o seguinte gancho:

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

Substitua [theme_name]pelo nome do seu tema e html_datepelo formato de horário desejado, um dos que você encontra abaixo /admin/config/regional/date-time.

Philipp Zedler
fonte
-1

Usei o seguinte código para o node - article - 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>
Damir Dimić
fonte