web-dev-qa-db-ja.com

Twigでカスタム日付形式をレンダリングしようとしています

私は自分の投稿テーマの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であり、これはノードが作成された日付ではないので、私は少しですここで失った。

5
Danny Englander

$node->createdFieldItemListオブジェクト です。

これらのいずれかを使用する必要があります。

$vars['thedate'] = format_date($node->created->value, "custom", "j");
$vars['thedate'] = format_date($node->getCreatedTime(), "custom", "j");

すべてのノードベースフィールド(および他のほとんどのエンティティタイプ、一部はまだ作業中)には、現在 NodeInterface で定義されているメソッドがあります。

7
tim.plunkett

Twig(前処理関数は不要)を使用するアプローチは次のとおりです):

<p>{{ node.createdtime | date("d F Y") }}</p>
12
wiifm

これを理解するのにもう少し助けが必要な人のために、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 }}

1
jimafisk