Durch die Suche habe ich viele Beispiele gefunden, die die EntityMetadataWrapper- set()
Funktion zum Aktualisieren von Entitätsfeldern verwenden, und sie erfolgreich in meinem Modul implementiert. Ich konnte jedoch nicht viel Dokumentation / Best Practices für die verschiedenen Array-Optionen finden, an die Sie übergeben können set()
. Ich möchte sicherstellen, dass die Art und Weise, wie ich Daten aktualisiere, später keine unvorhergesehenen Probleme verursacht.
Ich mache eine einfache Aktualisierung der Textfeldwerte in einem Formular-Rückruf:
function hook_FORM_ID_submit(&$form, &$form_state) {
// Get the node.
$node = node_load($form_state['nid']);
// Create entity metadata wrapper to get and set values easily.
$node_wrapper = entity_metadata_wrapper('node', $node, array('bundle', $node->type));
// Set fields
$node_wrapper->field_quip->set(array("value" => $form_state['values']['field_quip']['value']));
$node_wrapper->field_short_sentence_summary->set(array("value" => $form_state['values']['field_short_sentence_summary']['value']));
// Save node.
$node_wrapper->save();
}
Ich übergebe set()
ein Array mit nur einem Schlüssel : value
. Dies scheint gut zu funktionieren. Ich stelle jedoch fest, dass beim Aufrufen value()
desselben Felds vor dem Festlegen eines neuen Werts ein Array mit drei Schlüsseln zurückgegeben wird:
$original_value = $node_wrapper->field_quip->value();
// Output of $original_value:
// Array (
// 'value' => '<p>The original value</p>',
// 'format' => 'general',
// 'safe_value' => '<p>The original safe value</p>',
// )
So wie ich aktuelle Einstellungsfelder bin, verliere ich den bereinigten Wert. Wird das zurückkommen, um mich zu beißen? Sollte ich check_markup()
auf dem Wert laufen und übergeben format
und safe_value
an set()
, anstatt ein Array mit nur value
? Ich spalte hier vielleicht Haare, aber ich möchte sicherstellen, dass ich die Dinge richtig mache.