लेख दिनांक स्वरूप बदलें


21

मैं Drupal 8 में लेखों के लिए उपयोग होने वाले दिनांक प्रारूप को बदलना चाहता हूं। ऐसा लगता है कि यह Default medium dateडिफ़ॉल्ट रूप से प्रारूप का उपयोग करता है । मैंने अपना स्वयं का प्रारूप जोड़ा admin/config/regional/date-time, लेकिन मैं नहीं ढूँढ सकता कि लेख का उपयोग करने वाले प्रारूप को कहाँ संपादित किया जाए।

क्या सीएमएस से ऐसा करने का कोई तरीका है या क्या इसे कोड में करने की आवश्यकता है?

जवाबों:


41

इसलिए मुझे इस पर ध्यान देने की तुलना में अधिक समय बिताने के बाद, मैं इसके लिए दो समाधान लेकर आया हूं।

समाधान 1

इसे करने का एक तरीका डेट फ़ंक्शन के साथ है जो कि डीरोल 100 ने अपने उत्तर में उल्लेख किया है। मेरे केस के लिए, मेरी 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 की दिनांक प्रारूप प्रणाली का उपयोग करने के लिए, मैंने सबसे पहले अपना कस्टम प्रारूप बनाया 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 की Twig Filters के बारे में पता चला ।


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

Twig php दिनांक स्वरूप के समान नामकरण कोड का उपयोग करते हैं । टहनी तिथि स्वरूपों के बारे में अधिक जानकारी के लिए देखें - http://twig.sensiolabs.org/doc/filters/date.html


1
अंगूठा लगा दिया! darol100, क्या इसे TPL फाइलों में उसी तरह से किया जा सकता है जैसे Drupal 7 साइट पर किसी के लिए है?
जॉनडोए

1
हां, लेकिन ट्विग सिंटैक्स के बजाय PHP टेम्पलेट का उपयोग करता है। यह भी कुछ दिखना चाहिए <?php print format_date($node->created, 'custom', 'm/d/y'); ?>
१०:५० पर इसका दारडायरलॉरिस

धन्यवाद darol100, यह मुझे ट्विग फिल्टर के बारे में जानने में मदद करने में काफी उपयोगी था। अंत में, हालाँकि, मैं Drupal द्वारा प्रदान किए गए प्रारूप_डेट फ़िल्टर (जैसा कि मैं अपने उत्तर में दिखाता हूं) का उपयोग करके गया था।
क्रिस

8

मैं क्रिस के समाधान के लिए और अधिक हूं। 2. जैसा कि वह कहता है कि यह ड्रुपल तरीका है ... लेकिन यह अभी तक सबसे अच्छा विकल्प नहीं है।

format_date () को हटा दिया गया है और Drupal 9 से पहले हटा दिया जाएगा ... इसका मतलब है कि एक दिन, आप एक ड्रुपल अपडेट करेंगे और यह टूट जाएगा।

इसके बजाय, प्रीप्रोसेस फ़ंक्शन में अपनी .theme फ़ाइल में ऐसा करना बेहतर है।

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

2

ड्यूक ने जो कहा उसके बारे में एक अवलोकन:

format_date () को हटा दिया गया है और Drupal 9 से पहले हटा दिया जाएगा ...

हां, Drupal function format_date () कोर में परिभाषित / सम्‍मिलित / सम्‍मिलित है। वास्तव में, वंचित है। लेकिन, जब आप टहनी फ़िल्टर format_date () का उपयोग करते हैं, तो आप उस Drupal फ़ंक्शन को कॉल नहीं कर रहे हैं, इसके बजाय आप Drigal द्वारा TwigExtension में परिभाषित फ़िल्टर का उपयोग कर रहे हैं :: getFilters () , और फ़िल्टर फ़िल्टर DateFormatter :: format () कहते हैं

इसलिए, ट्विग फिल्टर स्वरूप_डेट () का उपयोग करना सुरक्षित है और क्रिस का समाधान 2 ठीक है।


2

पहले से उपयोग में आने वाले दिनांक प्रारूप को भी समाप्त करना संभव है, और यूआई में बस इसे बदल दें। बस उस पृष्ठ की तुलना करें जिसे आप पृष्ठ में दिनांक स्वरूपों के साथ देखते हैंadmin/config/regional/date-time/

यदि आप उदाहरण के लिए "डिफ़ॉल्ट मध्यम तिथि" बदलते हैं, तो यह किसी भी टेम्पलेट / टहनी फ़ाइलों को छूने के बिना इस प्रारूप का उपयोग करके तिथियां बदल देगा।

दिनांक प्रारूप बहु भाषा सेटअप के लिए प्रति भाषा सेट / अनुवादित भी किए जा सकते हैं।


यह सबसे अच्छा जवाब है!
सूडोमन

1

टोकन फ़ील्ड बनाने के लिए आप डिस्प्ले सूट का उपयोग करके अपना खुद का सबमिशन बाय फील्ड बना सकते हैं।

Drupal 8 / संरचना / ds / फ़ील्ड में

फिर html और टोकन का उपयोग करके एक फ़ील्ड जोड़ें ...

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

1

आप इस तरह से नोड.html.twig में प्रारूप को अनुकूलित कर सकते हैं:

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

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 तत्वों को नहीं, मैं निम्नलिखित हुक का उपयोग करता हूं:

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

मैंने नोड के लिए निम्न कोड का उपयोग किया है - लेख - 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>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.