私は自分の投稿テーマの1つをDrupal 8.に移植している最中です。ノードのカスタム日付形式の場合、テーマのtemplate.phpファイルのnode_preprocess関数に次のようなものがあります。 Drupal 7バージョン:
_$vars['thedate'] = format_date($node->created, "custom", "j");
$vars['themonth'] = format_date($node->created, "custom", "M");
$vars['theyear'] = format_date($node->created, "custom", "Y");
_
次のコードでレンダリングします。
_ <?php print $thedate; ?> / <?php print $themonth; ?> / <?php print $theyear; ?>
_
私のDrupal 8ポートでは、テーマの.themeファイルで同様のアプローチを試み、それらを_node.html.twig
_で_{{{ thedate }} / {{ themonth }} / {{ theyear }}}
_としてレンダリングしようとしましたが、 m厄介なエラーが発生します。
Twig_Error_Runtime:テンプレートのレンダリング中に例外がスローされました( "タイムスタンプは数値である必要があります。")themes/mytheme/templates/page.html.twig in line 210. in Twig_Template-> displayWithErrorHandling()(line 279 of of /site/core/vendor/twig/twig/lib/Twig/Template.php)。
私は Twig日付形式 を調べましたが、{{ display_submitted |date("m/d/Y") }}
などの変数を単にアタッチする必要があるようです。私は前処理関数なしでそれを試しましたが、出力は12/31/1969であり、これはノードが作成された日付ではないので、私は少しですここで失った。
$node->created
は FieldItemListオブジェクト です。
これらのいずれかを使用する必要があります。
$vars['thedate'] = format_date($node->created->value, "custom", "j");
$vars['thedate'] = format_date($node->getCreatedTime(), "custom", "j");
すべてのノードベースフィールド(および他のほとんどのエンティティタイプ、一部はまだ作業中)には、現在 NodeInterface で定義されているメソッドがあります。
Twig(前処理関数は不要)を使用するアプローチは次のとおりです):
<p>{{ node.createdtime | date("d F Y") }}</p>
これを理解するのにもう少し助けが必要な人のために、YOURTHEMENAME.themeファイルに以下を追加してください:
/**
* Implements template_preprocess_comment()
*/
function YOURTHEMENAME_preprocess_comment(&$variables) {
$comment = $variables['elements']['#comment'];
$variables['YOUR_DATE_NAME'] = format_date($comment->created->value, "custom", "m / j / y");
}
次に、テーマでtwigテンプレート(templates/comment.html.twigなど))を更新して、次のような変数を使用します:{{ YOUR_DATE_NAME }}