Drupal 8ノードの日付形式に「xx時間前」を使用するにはどうすればよいですか?
ノードの「xx時間前」を{{日付}}に置き換えたい。
Drupal 7では、このコードで動作しました:
<?php
print format_interval(time()-$node->created);
?>
これに対処するには2つの方法があります。
1つは、フィールドフォーマッタを使用することです。 DateTimeフィールドがある場合は、Manage Displayに移動し、-FormatをTime agoに変更します。次に、歯車をクリックして、いくつかのオプションを選択します。これらはページ全体でバブルアップするキャッシュを認識しますが、状況によってはキャッシュの寿命が短くなる可能性があります。
もう1つはtemplate_preprocess_node()
を使用することです。これは、フィールドではないタイムスタンプがある場合に適しています。次に、日付フォーマッターサービスを使用して、タイムスタンプをtimeago形式でレンダリングします。 formatInterval()ではなく、formatDiff()バージョンを使用することをお勧めします(正式には非推奨ではありませんが、お勧めしません)。
_function MYTHEME_preprocess_node(&$variables) {
/** @var \Drupal\Core\Datetime\DateFormatterInterface $formatter */
$date_formatter = \Drupal::service('date.formatter');
$variables['foo'] = $date_formatter->formatDiff(REQUEST_TIME - 12345, REQUEST_TIME, [
'granularity' => 3,
'return_as_object' => TRUE,
]);
}
_
FormatDiff()関数で_'return_as_object' => TRUE
_を指定すると、FormattedDateDiff
オブジェクトが返されます。これには、フォーマットされた文字列と、これを行うためのレンダー配列の最も正確な_[#cache]['max-age']
_エントリが含まれますDrupal 8の新しいキャッシングシステムで動作します。その後、Twigテンプレートで_{{ foo }}
_を使用できます。レンダリングエンジンは、プレーンな文字列の代わりにレンダリング配列。
formatTimeDiffSince()
とformatTimeDiffUntil()
のバリアント、および_$options you can pass in
_については、DateFormatterInterface
のドキュメントもご覧ください。
最も簡単な方法は、それをmeourtheme_preprocess_node()で準備し、twigテンプレートで印刷することです。
ただし、D8のレンダーキャッシュでは、キャッシュを無効にしない限り、サーバー側で少し前の出力を行おうとしても機能しません。最初のリクエストで計算され、それ以降は変更されません。
代わりに、解析しやすいマークアップで時刻を送信し、JSを使用してそれを時刻前の形式で表示します。コメントの日付について、d.oがどのように行うかを確認してください: https://www.drupal.org/node/2704717 (ダブルクリックで相対日付と絶対日付を切り替える機能も含まれています)。
$ this-> date-> formatTimeDiffSince($ time_stamp);
または
\ Drupal :: service( 'date.formatter')-> formatTimeDiffSince($ time_stamp);
Twigには、「Time Ago」フィルターを提供するネイティブのDate拡張機能があります
http://twig.sensiolabs.org/doc/extensions/date.html を参照してください
| time_diffが必要なものです。問題はDrupalにはデフォルトでこの拡張機能が含まれていないことです。
twigテンプレートでこれを取得するには、次のようにします
Twigテンプレートでフィルターを使用します
{{field_my_date | time_diff}}
「10か月前」のようなレンダリング
ここに答えがあります、
.themeファイルに、以下のコード関数を追加しますthemename_preprocess_comment(&$ variables){
$ date = $ variables ['comment']-> getCreatedTime(); $ variables ['created'] =\Drupal :: service( 'date.formatter')-> formatInterval(REQUEST_TIME-$ date); $ variables ['submitted'] = t( '@ author'、array( '@ author' => $ variables ['author']、 '!datetime' => ''。$ variables ['created']。 '前'));
}
そして、コードの下のcomment.html.twigファイルにレンダリングします
{{作成}} {{'前' | t}}
お役に立てば幸いです...