Змінити формат дати статті


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.

Про це я дізнався на цій сторінці про фільтри гілочок Друпала .


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 (як я показую у своїй відповіді).
Кріс

8

Я більше за рішення Кріса 2. Як він каже, це більше друпальський шлях ... але це ще не найкращий варіант.

format_date () був застарілим і буде видалений перед Drupal 9 ... це означає, що одного разу ви зробите оновлення для Drupal, і це порушиться.

Замість цього краще зробити це у вашому файлі .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 format_date (), визначена в core / include / common.inc , насправді застаріла. Але, коли ви використовуєте фільтр гілочок format_date (), ви НЕ викликаєте цю функцію Drupal, замість цього ви використовуєте фільтр гілочок, визначений Drupal у TwigExtension :: getFilters () , і цей фільтр викликає DateFormatter :: format () .

Отже, використання фільтру гілочки format_date () є безпечним, і рішення Кріса 2 добре.


2

Можна також знайти формат дати, який уже використовується, і просто змінити його в інтерфейсі. Просто порівняйте те, що ви бачите на сторінці, з форматами дат уadmin/config/regional/date-time/

Якщо ви зміните, наприклад, "Середня дата за замовчуванням", вона змінить дати, використовуючи цей формат, не торкаючись жодних файлів шаблону / гілочок.

Також можна встановити / перекласти формати дат на кожну мову для налаштування на декілька мов.


Це найкраща відповідь!
судом

1

Ви можете створити своє власне поле Submitted By, використовуючи Display Suite, щоб створити поле Token.

У Drupal 8 / структура / ds / поля

Потім додайте поле за допомогою html та лексем, як ...

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

1

Ви можете налаштувати формат у node.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

Я використовував наступний код для 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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.