Это частичный ответ и никоим образом не полный. Я также хотел бы узнать больше об обоих из них. Так что это может быть частью дискуссии; хотя я написал как ответ, а не как комментарий из-за следующих фрагментов кода и примеров того, как я использовал вышеупомянутые классы.
Позвольте мне проиллюстрировать некоторые из моих применений prepareRow () как ... что делает как говорится.
Недавно я давал некоторые данные для импорта из не друпальной базы данных. Сущность, к которой я добавляю, требует ввода полей, которых у меня нет при импорте данных.
Поэтому, прежде чем мой исходный класс будет создан, я могу добавить
$source_fields = array(
'changed' => t('Timestamp of when the change was made.'),
'created' => t('Timestamp of when the node was Created.'),
);
а затем в функции prepareRow я могу сделать следующее
$nowtimestamp = mktime(date('Y-m-d'));
$row->changed = $nowtimestamp;
$row->created = $nowtimestamp;
Вы также можете запускать операторы php if / else здесь, если это необходимо.
Я также использовал функцию подготовки в своем коде и использую ее для присвоения значений сущности.
$account->field_job_location [und][0]['tid'] = $row->job_location_tid;
Я только использовал это в этом сценарии, так как я сделал свой собственный плагин для нодов.
Также, если вам нужно сделать расчеты, вы можете сделать это в prepareRow, который запускается перед prepare ().
Например, в импорте у меня было значение, помеченное как «Город», - и я мог превратить его в идентификатор термина.
if ($TownCity == 'London' ){
$row->job_location_tid = '10';
} else {
$row->job_location_tid = '11';
}
Надеюсь, это поможет.