Festlegen eines Datumsfelds über privilegity_metadata_wrapper

8

Ich versuche, ein Feld vom dateTyp durch Verwendung von entity_metadata_wrapperfestzulegen, aber obwohl das Feld in mysql als Datum / Uhrzeit erstellt wird, wird beim Erstellen eines Knotens das erwartete Format JJJ-MM-TT HH: MM: SS festgelegt, wenn die Verwendung entity_metadata_wrapperfehlschlägt. Das einzige, was ich einfügen konnte, sind Zeitstempel. Ich habe sowohl das ISO-Datumsformat als auch das Standardformat ausprobiert.

Hier ist die Zeile, die ich zum Aktualisieren verwenden möchte:

   // sets reminder date in db
   $wrapper->field_event_reminder_date->set($reminder_date->format("Y-m-d H:i:s"));

Vielen Dank!

stefgosselin
quelle

Antworten:

5

Ich weiß, dass diese Frage vor einiger Zeit gestellt wurde, aber für diejenigen, die auf diese Frage stoßen, scheint die Antwort unter http://drupal.org/node/1803286 gegeben zu sein . Es gibt keinen Setter-Rückruf für Datumsfelder in der Entitäts-API, daher können Sie Datumswerte nicht mit entity_metadata_wrapper festlegen. Der in dieser Antwort angegebene do-Knoten bietet eine Problemumgehung.

Jacobson
quelle
Schöner Fang! -> Für das nächste Mal mit einem Lesezeichen versehen muss ich mit Datumsfeldern spielen. Danke Freund.
Stefgosselin
8

Ich konnte das auf Umwegen zum Laufen bringen. Ich hätte vielleicht das Gleiche erreichen können time(), aber das war für mich besser, da ich genau verfolgen konnte, was ich tat, wenn ich in Zukunft jemals wieder zum Code zurückkehren würde.

// Update the Acceptance Date of Current Agreement.
$acceptance_date = new DateTime(date('Y-m-d 00:00:00'));
$company_wrapper->field_acceptance_date->set($acceptance_date->getTimestamp());
Anniegreens
quelle
5

Wenn das Feld kein Enddatum erfasst, setzen Sie es mit dem Zeitstempel:

$entity_wrapper->field_date = 1431670535;

Wenn ja:

$entity_wrapper->field_date = array(
  'value' => '2015-05-12 11:30:38',
  'value2' => '2015-05-25 21:45:33',
);
ya.teck
quelle
Dies ist am nützlichsten, um zu zeigen, wie Datumsangaben ohne Enddatum festgelegt werden.
Reedbert
3

Die veröffentlichten Beispiele haben bei mir nicht funktioniert. Ich hatte ein Datumsfeld auf der Benutzerentität eingerichtet, mit nur einem Startdatum und ohne Uhrzeit. Das Widget sollte keine Rolle spielen, sondern nur das Standardtextfeld verwenden.

Schließlich funktionierte es mit dem Entity-Metadaten-Wrapper und musste nur -> set (time ()) verwenden. Der folgende Code zeigt das Festlegen eines Kontrollkästchens "Boolescher Wert", eines Produktreferenzfelds und des Datumsfelds.

$wrapper = entity_metadata_wrapper('user', $account);
$wrapper->field_subscription_active = 1;
$wrapper->field_subscriptionplan->set($line_item->commerce_product[LANGUAGE_NONE][0]['product_id']);
$wrapper->field_subscription_signup_date->set(time());
$wrapper->save();
Blaine Lang
quelle
2

Es scheint, dass die Einstellung des Werts von der Art des Datumsfelds abhängt. Dies funktionierte bei mir bei Verwendung eines DateFeldtyps mit Start- und Enddatum.

$product->field_course_event_date->set(array(
  'value' => "2013-12-09 00:00:00",
  'value2' => "2013-12-10 00:00:00",
));

Anhand eines anderen Beispiels funktionierte dies für mich mit einem DateFeld, unbegrenztem Wert, nur Startzeit:

$invitation->field_dates = array(1431670535);
tyler.frankenstein
quelle
1
Meinst du nicht valueund value2?
Artfulrobot