web-dev-qa-db-ja.com

entity_metadata_wrapper()を使用して、ノードの日付フィールドから単一の日付値を取得します

Entity_metadata_wrapperでノードに接続された日付フィールドから日付値を取得したいのですが。

これまでのところ:

$node_wrapper->field_tournament_date->value();

配列を提供します。他の多くの方法は機能しません。だから、私はしなければなりません:

$date = $node_wrapper->field_tournament_date->value();
$start_date = format_date($date['value'], 'short');

そのように分割することなく日付フィールドの値を取得するよりきれいな方法はありますか?

3
Kevin

Meta_data_wrapperを使用するこれらの状況では、次のように、value関数の前にarray-valueを置くことができます。

$date = $node_wrapper->field_tournament_date->value->value();
5
Nicholas Ruunu

サーバーが実行中の場合PHP 5.4を使用できます。

$start_date = format_date($node_wrapper->field_tournament_date->value()['value'], 'short');

関数配列の逆参照 が追加されたため。

それ以外は、コードを正直に減らす方法はないと思います。日付フィールドを頻繁に操作する場合は、次のような小さなヘルパー関数を作成することを検討してください。

function MYMODULE_format_date_field($value, $column = 'value', $format = 'short') {
  return format_date($value[$column], $format);
}
$start_date = MYMODULE_format_date_field($node_wrapper->field_tournament_date->value());

または類似。それは最善ではありませんが、少し時間を節約できる可能性があります。

2
Clive

私は次のアプローチを使用します:

foreach ($node_wrapper->field_tournament_date->getIterator() as $date_wrapper) {
  // dpm($date_wrapper->getPropertyInfo() // to see what properties you have
  $start_date = $date_wrapper->value->value();
  $end_date = $date_wrapper->value2->value();
  $duration = $date_wrapper->duration->value();
}
0
Елин Й.

私は以下を使用しました:

$entity->field_date->get( 0 )->value->value( );

日付フィールドはリストであるため、getの呼び出しが必要です。

0
Jay Haase