Makale tarihi formatını değiştir


21

Drupal 8'deki makaleler için kullanılan tarih biçimini değiştirmek istiyorum Default medium date. Varsayılan olarak biçimi kullanıyor gibi görünüyor . Adresime kendi biçimimi ekledim admin/config/regional/date-time, ancak makalelerin kullandığı biçimi nerede düzenleyeceğimi bulamıyorum.

Bunu CMS'den yapmanın bir yolu var mı veya kodda mı yapılması gerekiyor?

Yanıtlar:


41

Bu yüzden, buna bakmayı kabul ettiğimden daha fazla zaman harcadıktan sonra, bunun için iki çözüm buldum.

1. Çözüm

Bunu yapmanın bir yolu darol100'ün cevabında bahsettiği tarih işlevidir. Davam için örneğini değiştirerek, dosyamda node--article.html.twigdeğiştirdim:

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

için

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

Bu yaklaşımın avantajı kolay ve hızlı olmasıdır. Dezavantajı Drupal'ın yerleşik tarih formatı sistemini kullanmıyorum.

2. Çözüm

Drupal'ın tarih format sistemini kullanmak için önce adresinde özel formatımı oluşturdum admin/config/regional/date-time. Sonra node--article.html.twigaşağıdaki gibi düzenledim :

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

Bu , makine adıyla sonuçlanan özel formatımı " Özel Formatım " olarak adlandırdığımı varsayar my_custom_format.

Bu çözüm fazladan bir adım gerektirse de, bunu yapmanın daha Drupal yolu olduğunu düşünüyorum.

Bu sayfada Drupal's Twig Filters'ı öğrendim .


9

Makale içerik türü düzeyinde tarih format tabanını değiştirmek istiyorsanız. Aşağıdaki kodu düzenleyebilir / ekleyebilir post.published_at|dateve tarih biçimini değiştirmek için bir filtre kullanabilirsiniz.

Düğüm - 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, php tarih formatıyla aynı adlandırma kodunu kullanır . Dal tarihi biçimleri hakkında daha fazla bilgi için ziyaret edin - http://twig.sensiolabs.org/doc/filters/date.html


1
Başparmaklı! darol100, Bu DPLal 7 sitesi olan biri için TPL dosyalarında aynı şekilde yapılabilir mi?
JohnDoea

1
Evet, ancak dal sözdizimi yerine PHP şablonu kullanıyor. Bu da bir şeye benzemeli <?php print format_date($node->created, 'custom', 'm/d/y'); ?>.
itsdarrylnorris

Teşekkürler darol100, bu Twig filtreleri hakkında bilgi edinmeme yardımcı oldu. Ancak sonuçta Drupal'ın sağladığı format_date filtresini kullanmaya başladım (cevabımda gösterdiğim gibi).
Chris

8

Chris'in çözümü 2 için daha fazlayım. Dediği gibi daha drupal bir yoldur ... ama bu henüz en iyi seçenek değil.

format_date () kullanımdan kaldırıldı ve Drupal 9'dan önce kaldırılacak ... yani bir gün drupal bir güncelleme yapacaksınız ve bu bozulacak.

Bunun yerine, bunu .theme dosyanızda önişleme işlevinde yapmanız daha iyidir.

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

2

Duke'un ne dediği hakkında bir gözlem:

format_date () kullanımdan kaldırıldı ve Drupal 9'dan önce kaldırılacak ...

Evet, core / include / common.inc dosyasında tanımlanan Drupal işlevi format_date () aslında kullanımdan kaldırılmıştır. Ancak, format_date () twig süzgecini kullandığınızda, bu Drupal işlevini ÇIKARMAYIN, bunun yerine Drupal tarafından TwigExtension :: getFilters () öğesinde tanımlanan dal süzgecini kullanıyorsunuz ve bu süzgeç DateFormatter :: format () öğesini çağırıyor .

Bu nedenle, format_date () dallama filtresini kullanmak güvenlidir ve Chris'in çözümü 2 gayet iyi.


2

Zaten kullanımda olan tarih biçimini belirlemek de mümkündür ve sadece kullanıcı arayüzünde de değiştirilebilmektedir. Sayfada gördüklerinizi tarih biçimleriyle karşılaştırın.admin/config/regional/date-time/

Örn. "Varsayılan orta tarih" değiştirirseniz, bu formatı kullanarak herhangi bir şablona / dal dosyasına dokunmadan tarihleri ​​değiştirir.

Tarih biçimleri, çoklu dil ayarları için dil başına da ayarlanabilir.


Bu en iyi cevap!
sudoman,

1

Bir Token Alanı oluşturmak için Display Suite'i kullanarak kendi Gönderen Alanınızı oluşturabilirsiniz.

Drupal 8'de / yapı / ds / alanlar

Sonra html ve benzeri simgeleri kullanarak bir alan ekleyin ...

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

1

Bu şekilde node.html.twig'deki biçimi özelleştirebilirsiniz:

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

0

Tarih ve Saat için PHP tüm biçimleri olabilir

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

Yalnızca tarihin karakterlerini değiştirdiğimden, ancak çevreleyen HTML öğelerinin değişmediğinden emin olmak için aşağıdaki kancayı kullanıyorum:

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

Değiştir [theme_name]Temanızın adıyla ve html_dateistediğiniz saat formatında, sen altında bulmak bunlardan birini /admin/config/regional/date-time.


-1

Düğüm - article - full.html.twig için aşağıdaki kodu kullandım:

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.