เปลี่ยนรูปแบบวันที่ของบทความ


21

ฉันต้องการเปลี่ยนรูปแบบวันที่ที่ใช้สำหรับบทความใน Drupal 8 ดูเหมือนว่าจะใช้Default medium dateรูปแบบตามค่าเริ่มต้น ฉันเพิ่มรูปแบบของตัวเองที่admin/config/regional/date-timeแต่ไม่สามารถหาตำแหน่งที่จะแก้ไขรูปแบบที่บทความใช้

มีวิธีการทำเช่นนี้จาก CMS หรือไม่จำเป็นต้องทำในรหัส?

คำตอบ:


41

ดังนั้นหลังจากใช้เวลามากขึ้นกว่าที่ฉันสนใจที่จะยอมรับในเรื่องนี้ฉันก็เลยได้คำตอบสองข้อนี้

โซลูชันที่ 1

วิธีหนึ่งที่ทำได้คือใช้ฟังก์ชั่นวันที่ที่ darol100 พูดถึงในคำตอบของเขา แก้ไขตัวอย่างของเขาสำหรับกรณีของฉันในnode--article.html.twigไฟล์ของฉันฉันเปลี่ยน:

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

ไปยัง

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

ข้อดีของวิธีนี้คือง่ายและรวดเร็ว ข้อเสียคือฉันไม่ได้ใช้ระบบรูปแบบวันที่ในตัวของ Drupal

โซลูชันที่ 2

เพื่อที่จะใช้ระบบรูปแบบวันที่ของ Drupal admin/config/regional/date-timeครั้งแรกที่ผมได้สร้างรูปแบบที่กำหนดเองของฉันที่ จากนั้นฉันแก้ไขnode--article.html.twigดังต่อไปนี้:

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

นี้จะถือว่าผมตั้งชื่อรูปแบบกำหนดเองของฉัน " รูปแบบของฉันที่กำหนดเอง " my_custom_formatซึ่งส่งผลให้ชื่อเครื่อง

ในขณะที่การแก้ปัญหานี้ต้องการขั้นตอนพิเศษฉันรู้สึกว่ามันเป็นวิธี Drupal มากขึ้นที่จะทำมัน

ผมได้เรียนรู้เกี่ยวกับเรื่องนี้ในหน้านี้เกี่ยวกับของ Drupal กรองทวิ


9

หากคุณต้องการเปลี่ยนรูปแบบวันที่ฐานในระดับประเภทเนื้อหาบทความ คุณสามารถแก้ไข / เพิ่มรหัสต่อไปนี้post.published_at|dateและใช้ตัวกรองเพื่อเปลี่ยนรูปแบบวันที่

โหนด - 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 #}

ทวิใช้รหัสการตั้งชื่อเช่นเดียวกับรูปแบบวันที่ PHP สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบวันที่ทวิก - http://twig.sensiolabs.org/doc/filters/date.html


1
ยกนิ้วให้! darol100, สิ่งนี้สามารถทำได้ในไฟล์ TPL ในลักษณะเดียวกันสำหรับผู้ที่มีเว็บไซต์ Drupal 7 หรือไม่?
JohnDoea

1
ใช่ แต่ใช้เทมเพลต PHP แทนไวยากรณ์ทวิก <?php print format_date($node->created, 'custom', 'm/d/y'); ?>มันควรจะเป็นรูปลักษณ์ที่บางสิ่งบางอย่างมากเกินไปนี้
itsdarrylnorris

ขอบคุณ darol100 สิ่งนี้มีประโยชน์มากในการช่วยฉันเรียนรู้เกี่ยวกับตัวกรอง Twig อย่างไรก็ตามในที่สุดฉันก็ใช้ตัวกรอง format_date ที่ Drupal ให้ (ตามที่ฉันแสดงในคำตอบของฉัน)
Chris

8

ฉันเป็นทางออกของคริสมากขึ้น 2 ในขณะที่เขาบอกว่ามันเป็นวิธีที่น่าเบื่อหน่าย ... แต่มันก็ยังไม่ใช่ตัวเลือกที่ดีที่สุด

format_date () ถูกเลิกใช้แล้วและจะถูกลบออกก่อน Drupal 9 ... หมายความว่าวันหนึ่งคุณจะทำการอัปเดต drupal และสิ่งนี้จะหยุดลง

แต่จะเป็นการดีกว่าถ้าคุณทำเช่นนี้ในไฟล์. theme ในฟังก์ชัน preprocess

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

2

ข้อสังเกตเกี่ยวกับสิ่งที่ Duke พูดว่า:

format_date () ถูกเลิกใช้แล้วและจะถูกลบออกก่อน Drupal 9 ...

ใช่ฟังก์ชั่น Drupal format_date () ที่กำหนดไว้ในcore / include / common.incคือที่จริงแล้วเลิกใช้แล้ว แต่เมื่อคุณใช้ตัวกรองกิ่งformat_date ()คุณไม่ได้เรียกว่าฟังก์ชั่น Drupal แทนที่จะว่าคุณกำลังใช้ตัวกรองกิ่งไม้ที่กำหนดโดย Drupal ใน TwigExtension :: getFilters ()และตัวกรองนี้เรียกDateFormatter :: รูปแบบ ()

ดังนั้นการใช้ twig filter format_date ()จึงปลอดภัยและโซลูชันของ Chris 2 นั้นใช้ได้


2

นอกจากนี้ยังเป็นไปได้ที่จะกำหนดรูปแบบวันที่ที่ใช้งานอยู่และเพียงแค่เปลี่ยนรูปแบบใน UI เพียงเปรียบเทียบสิ่งที่คุณเห็นบนหน้าเว็บกับรูปแบบวันที่admin/config/regional/date-time/

หากคุณเปลี่ยนเช่น "วันกลางเริ่มต้น" มันจะเปลี่ยนวันที่โดยใช้รูปแบบนี้โดยไม่ต้องแตะไฟล์เทมเพลต / ทวิกใด ๆ

รูปแบบวันที่ยังสามารถตั้งค่า / แปลต่อภาษาสำหรับการตั้งค่าหลายภาษา


นี่คือคำตอบที่ดีที่สุด!
sudoman

1

คุณสามารถสร้างฟิลด์ส่งโดยของคุณเองโดยใช้ Display Suite เพื่อสร้างฟิลด์โทเค็น

ใน Drupal 8 / structure / ds / field

จากนั้นเพิ่มฟิลด์โดยใช้ html และโทเค็นเช่น ...

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


0

คุณสามารถมี PHP ทุกรูปแบบสำหรับวันที่และเวลา

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

เพื่อให้แน่ใจว่าฉันเปลี่ยนเฉพาะอักขระของวันที่ แต่ไม่ใช่องค์ประกอบ HTML ที่อยู่โดยรอบฉันจะใช้ 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;
  }
}

แทนที่[theme_name]ด้วยชื่อของธีมของคุณและมีรูปแบบเวลาที่คุณต้องการเป็นหนึ่งในบรรดาคุณพบว่าภายใต้html_date/admin/config/regional/date-time


-1

ฉันใช้รหัสต่อไปนี้สำหรับ 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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.