Feeds : Importer multiples images
Submitted by yvan on Fri, 05/27/2011 - 13:06
Depuis que le module Feeds est devenu relativement très stable je n'utilise plus que lui pour importer le contenu sur un site Drupal.
Ce petit module à plusieurs avantages, dont notamment d'importer pleins de format différents et même du XML formaté super bizarre comme NewsML, etc. (Merci XPath).
Bref, malheureusement ce module ne gère pas encore l'importation de fichier image multiple. Heureusement, j'ai trouvé comment faire et voici la solution. (sans hacké le code du module).
D'abord, il faudra vous créer un module perso, ça j'espère que vous savez le faire, après il faut l'activer et s'assurer que ce module s'exécute après tous les modules Feeds (weight dans la table system).
Et voici le code qui vous permet de faire ce que vous voulez :
<?php function mymodule_feeds_node_processor_targets_alter(&$targets) { $targets['field_images'] = array( // ici changez le nom du field au besoin 'name' => 'Images', 'callback' => 'dstouch_filefield_feeds_set_target', 'description' => 'The URL for the CCK Images field of the node.', ); } function mymodule_filefield_feeds_set_target($node, $field_name, $value) { $value = explode('||', $value); // ici vous pouvez changer le séparateur de valeurs // Normalize $value, create an array of FeedsEnclosures of it. $enclosures = array(); if (!is_array($value)) { $value = array($value); } foreach ($value as $k => $v) { if ($v instanceof FeedsEnclosure) { $enclosures[] = $v; } elseif (valid_url($v)) { $enclosures[$k] = new FeedsEnclosure($v, 'application/octet-stream'); } } // Map enclosures. $items = isset($node->$field_name) ? $node->$field_name : array(); foreach ($enclosures as $enclosure) { if ($file = $enclosure->getFile()) { $field = content_fields($field_name, $node->type); $target_dir = filefield_widget_file_path($field, user_load($node->uid)); $info = field_file_save_file($enclosure->getFile(), array(), $target_dir); if ($info) { $info['list'] = array(); $info['data'] = array('description' => ''); if ($field['list_field']) { $info['list'] = $field['list_default']; } $items[] = $info; $error = false; } } } $node->$field_name = $items; } ?>
Tags:





Recent comments
40 weeks 1 day ago
46 weeks 4 days ago
46 weeks 6 days ago
50 weeks 5 days ago
50 weeks 5 days ago
50 weeks 6 days ago
1 year 3 weeks ago
1 year 5 weeks ago
1 year 5 weeks ago
1 year 5 weeks ago