Dies ist eine Teilantwort und in keiner Weise vollständig. Ich würde auch gerne mehr über beide erfahren. Dies kann also Teil einer Diskussion sein; obwohl ich aufgrund der folgenden Codefragmente und Beispiele, wie ich die obigen Klassen verwendet habe, eher als Antwort als als Kommentar geschrieben habe.
Lassen Sie mich einige meiner Verwendungen prepareRow () als - veranschaulichen, was es tut.
Vor kurzem gab ich einige Daten zum Importieren aus einer Nicht-Drupal-Datenbank. Für die Entität, zu der ich hinzufüge, müssen Felder eingegeben werden, die ich nicht in meinem Datenimport habe.
Bevor meine Quellklasse erstellt wird, kann ich hinzufügen
$source_fields = array(
'changed' => t('Timestamp of when the change was made.'),
'created' => t('Timestamp of when the node was Created.'),
);
und dann kann ich in der Funktion prepareRow Folgendes tun
$nowtimestamp = mktime(date('Y-m-d'));
$row->changed = $nowtimestamp;
$row->created = $nowtimestamp;
Sie können hier bei Bedarf auch php if / else-Anweisungen ausführen.
Ich habe auch die Vorbereitungsfunktion in meinem Code verwendet und verwende sie, um der Entität Werte zuzuweisen.
$account->field_job_location [und][0]['tid'] = $row->job_location_tid;
Ich musste dies nur in diesem Szenario verwenden, da ich mein eigenes benutzerdefiniertes Knoten-Plugin erstellt habe.
Auch wenn Sie diesbezüglich Berechnungen durchführen müssen, können Sie dies in prepareRow tun, das vor prepare () ausgeführt wird.
Zum Beispiel hatte ich beim Import einen Wert mit der Bezeichnung "Stadt" - und konnte daraus eine Term-ID machen.
if ($TownCity == 'London' ){
$row->job_location_tid = '10';
} else {
$row->job_location_tid = '11';
}
Ich hoffe das hilft.