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!

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.


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());

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',
);

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();

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);

1
Meinst du nicht valueund value2?
Artfulrobot
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.