回答:
ですから、私がこれを検討することを認めるよりも多くの時間を費やした後、これに対する2つの解決策を思いつきました。
解決策1
それを行う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」という名前を付けたことを前提としていますmy_custom_format
。その結果、マシン名がになります。
このソリューションには追加の手順が必要ですが、それを行うにはDrupalの方が適していると感じています。
このページでDrupalのTwig Filtersについて学びました。
記事のコンテンツタイプレベルに基づいて日付形式を変更する場合。次のコードpost.published_at|date
を編集/追加し、フィルターを使用して日付形式を変更できます。
node--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をご覧ください。
<?php print format_date($node->created, 'custom', 'm/d/y'); ?>
です。
私はクリスのソリューション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');
}
デュークが言ったことについての観察:
format_date()は非推奨になり、Drupal 9の前に削除されます...
はい、core / includes / common.incで定義されているDrupal関数format_date()は、実際、非推奨です。ただし、小枝フィルターformat_date()を使用するときは、そのDrupal関数を呼び出すのではなく、TwigExtension :: getFilters()でDrupalによって定義された小枝フィルターを使用し、 このフィルターはDateFormatter :: format()を呼び出します。
したがって、小枝フィルターformat_date()を使用することは安全であり、Chrisのソリューション2は問題ありません。
Display Suiteを使用してトークンフィールドを作成することにより、独自のSubmitted Byフィールドを作成できます。
Drupal 8 / structure / ds / fieldsで
次に、htmlとトークンを使用してフィールドを追加します...
By [node:author] on [node:created:custom:F j, Y]
日付と時刻のすべての形式の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>
日付の文字のみを変更し、周囲の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
希望の時刻形式(で見つけられる形式の1つ)に置き換えます/admin/config/regional/date-time
。
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>