danielebarchiesi@4: addFieldMapping('field_my_link', 'source_url'); danielebarchiesi@4: * $this->addFieldMapping('field_my_link:title', 'source_title'); danielebarchiesi@4: * $this->addFieldMapping('field_my_link:attributes', 'source_attributes'); danielebarchiesi@4: * @endcode danielebarchiesi@4: * danielebarchiesi@4: * With earlier versions of Migrate, you must pass an arguments array: danielebarchiesi@4: * danielebarchiesi@4: * @code danielebarchiesi@4: * $link_args = array( danielebarchiesi@4: * 'title' => array('source_field' => 'source_title'), danielebarchiesi@4: * 'attributes' => array('source_field' => 'source_attributes'), danielebarchiesi@4: * ); danielebarchiesi@4: * $this->addFieldMapping('field_my_link', 'source_url') danielebarchiesi@4: * ->arguments($link_args); danielebarchiesi@4: * @endcode danielebarchiesi@4: */ danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Implements hook_migrate_api(). danielebarchiesi@4: */ danielebarchiesi@4: function link_migrate_api() { danielebarchiesi@4: return array( danielebarchiesi@4: 'api' => 2, danielebarchiesi@4: 'field handlers' => array('MigrateLinkFieldHandler'), danielebarchiesi@4: ); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: class MigrateLinkFieldHandler extends MigrateFieldHandler { danielebarchiesi@4: public function __construct() { danielebarchiesi@4: $this->registerTypes(array('link_field')); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: static function arguments($title = NULL, $attributes = NULL, $language = NULL) { danielebarchiesi@4: $arguments = array(); danielebarchiesi@4: if (!is_null($title)) { danielebarchiesi@4: $arguments['title'] = $title; danielebarchiesi@4: } danielebarchiesi@4: if (!is_null($attributes)) { danielebarchiesi@4: $arguments['attributes'] = $attributes; danielebarchiesi@4: } danielebarchiesi@4: if (!is_null($language)) { danielebarchiesi@4: $arguments['language'] = $language; danielebarchiesi@4: } danielebarchiesi@4: return $arguments; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Implementation of MigrateFieldHandler::fields(). danielebarchiesi@4: * danielebarchiesi@4: * @param $type danielebarchiesi@4: * The field type. danielebarchiesi@4: * @param $instance danielebarchiesi@4: * Instance info for the field. danielebarchiesi@4: * @param Migration $migration danielebarchiesi@4: * The migration context for the parent field. We can look at the mappings danielebarchiesi@4: * and determine which subfields are relevant. danielebarchiesi@4: * @return array danielebarchiesi@4: */ danielebarchiesi@4: public function fields($type, $instance, $migration = NULL) { danielebarchiesi@4: return array( danielebarchiesi@4: 'title' => t('Subfield: The link title attribute'), danielebarchiesi@4: 'attributes' => t('Subfield: The attributes for this link'), danielebarchiesi@4: 'language' => t('Subfield: The language for the field'), danielebarchiesi@4: ); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: public function prepare($entity, array $field_info, array $instance, array $values) { danielebarchiesi@4: if (isset($values['arguments'])) { danielebarchiesi@4: $arguments = $values['arguments']; danielebarchiesi@4: unset($values['arguments']); danielebarchiesi@4: } danielebarchiesi@4: else { danielebarchiesi@4: $arguments = array(); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: $language = $this->getFieldLanguage($entity, $field_info, $arguments); danielebarchiesi@4: $values = array_filter($values); danielebarchiesi@4: danielebarchiesi@4: foreach ($values as $delta => $value) { danielebarchiesi@4: $item = array(); danielebarchiesi@4: if (isset($arguments['title'])) { danielebarchiesi@4: if (!is_array($arguments['title'])) { danielebarchiesi@4: $item['title'] = $arguments['title']; danielebarchiesi@4: } danielebarchiesi@4: elseif (isset($arguments['title'][$delta])) { danielebarchiesi@4: $item['title'] = $arguments['title'][$delta]; danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: if (isset($arguments['attributes'])) { danielebarchiesi@4: $item['attributes'] = $arguments['attributes']; danielebarchiesi@4: } danielebarchiesi@4: $item['url'] = $value; danielebarchiesi@4: $return[$language][$delta] = $item; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: return isset($return) ? $return : NULL; danielebarchiesi@4: } danielebarchiesi@4: }