Установка поля даты с помощью privity_metadata_wrapper

8

Я пытаюсь установить поле dateтипа с помощью, entity_metadata_wrapperно хотя поле создается как datetime в mysql, и создание узла устанавливает его с ожидаемым форматом YYY-MM-DD HH: MM: SS, когда entity_metadata_wrapperего использование не удается. Единственное, что мне удалось вставить - это временные метки, я попробовал как формат даты Iso, так и стандартный.

Вот строка, которую я пытаюсь использовать для обновления:

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

Спасибо!

stefgosselin
источник

Ответы:

5

Я знаю, что этот вопрос задавали некоторое время назад, но для тех, кто сталкивался с этим вопросом, ответ, кажется, будет дан по адресу http://drupal.org/node/1803286 . В Entity API отсутствует обратный вызов установщика для полей даты, поэтому вы не можете устанавливать значения даты с помощью entity_metadata_wrapper. Узел do, указанный в этом ответе, дает обходной путь.

Jacobson
источник
Хорошо поймал! -> Закладка на следующий раз, когда я должен играть с полями даты. Спасибо друг.
stefgosselin
8

Я смог заставить это работать окольным путем. Возможно, я смог выполнить то же самое time(), но для меня это было лучше, поскольку я мог точно следовать тому, что делал, если когда-нибудь вернусь к коду в будущем.

// 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
источник
5

Если поле не собирает дату окончания, установите его с отметкой времени:

$entity_wrapper->field_date = 1431670535;

Если это так:

$entity_wrapper->field_date = array(
  'value' => '2015-05-12 11:30:38',
  'value2' => '2015-05-25 21:45:33',
);
ya.teck
источник
Это наиболее полезно для демонстрации того, как устанавливать даты без конечной даты.
Ридберт
3

Приведенные примеры не работают для меня. У меня была настройка поля даты на пользовательском объекте, только с начальной датой и без времени. Виджет не должен иметь значения, он просто использует текстовое поле по умолчанию.

Наконец, он заработал, используя обертку метаданных сущности, и ему нужно было только использовать -> set (time ()). Код ниже показывает установку флажка «логическое» поле, поле ссылки на продукт и поле даты.

$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

Похоже, что то, как установлено значение, зависит от типа поля даты. Это сработало для меня при использовании Dateтипа поля с начальной и конечной датой.

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

Используя другой пример, это работало для меня с Dateполем, неограниченное значение, только время начала:

$invitation->field_dates = array(1431670535);
tyler.frankenstein
источник
1
Разве вы не имеете в виду valueи value2?
artfulrobot