[development] The state of import export

Audrey Foo audrey at raincitystudios.com
Mon Jan 28 22:43:27 UTC 2008


For various reasons, I also arrived at node_save()'s doorstep for data
import demands of 6000+ nodes of a few different content types.

Most recently had a little help from Adrian, and managed to import 10 000
nodes with the imagefield populated, as well as files table.

I find that the most difficult part of data import is to understand the
older website, database and files structure, the current customer
requirements, and making sure that all the taxonomy and content types are
defined.

One little trick, which I haven't yet figured out, is why when populating
the imagefield nid, I needed to use node_save twice. Node_save did not save
the imagefield nid, when first creating a node. Once saved, and the node
object was properly populated and passed back by reference, the second time,
the imagefield nid was updated.

For example, most cck fields, can be populated before node_save() by ==>
$node->field_secondarytitle[0]['value'] = "some value";
$node->field_related[0]['nid'] = 123;
node_save($node);

For imagefield ==>
node_save($node);
// need the second node_save to save the imagefield
$n->field_image[0]['fid'] = $fid;
node_save($node);

Thanks
Audrey


On 1/27/08, emspace.com.au at gmail.com <emspace.com.au at gmail.com> wrote:
>
> I would add to the list http://drupal.org/project/install_profile_api
> Particularly the crud.inc file.
>
> I've used it for a couple projects and added bits to it.
>
> Topically, I do have a node create function that works well most of
> the time. But it's a bit flakey depending what contrib modules are
> doing to the node form.
>
> I focus on passing everything in a simple keyed array format, and the
> function then makes it look like a node submission. The difficulty
> I've had is making the submitted form the right structure - the cck
> fields are difficult to emulate, but I'm handling many of them (text,
> number, nodereference, etc).
>
> If it's of any interest, here is the uncommitted code. I chopped out
> some hacks, so this version untested.
>
> function install_create_content($content_type, $properties) {
>   global $user;
>
>   $default = array();
>   $default['type'] = $content_type;
>   $default['format'] = 0;
>   $default['comment'] = 2; // Enable read/write comments
>   $default['status'] = 1;  // Published
>   $default['promote'] = 0; // Not promoted to front page.
>   $default['sticky'] = 0;  // Not sticky.
>
>   $default['created'] = date('g:i:sA');
>   $default['log'] = 'Updated at ' . date('g:i:sA') . ' via
> install_create_content' ;
>
>   $default['name'] = $user->name;
>   $default['uid'] = $user->uid;
>
>   foreach ($properties AS $property => $value) {
>     $field = content_fields($property, $content_type);
>     if (isset($field['field_name'])) {
>       switch ($field['type']) {
>         case 'nodereference':
>         case 'userreference':
>           $default[$property] = array(array('nid' => $value));
>           break;
>         default:
>           if (is_array($value)) {
>             // Uncertain.
>             $default[$property][] = $value;
>           }
>           else {
>             $default[$property] = array(array('value' => $value));
>           }
>       }
>       if ($field['widget']['type'] == 'options_select' &&
> isset($default[$property][0]['value'])) {
>         if ($field['multiple']) {
>           foreach ($property[0] AS $v) {
>             $default[$property]['keys'][$value] = $value;
>           }
>         }
>         else {
>           $default[$property]['key'] = $default[$property][0]['value'];
>         }
>         //unset($default[$property][0]);
>       }
>       unset($properties[$property]);
>     }
>   }
>
>   $node = array_merge($default, $properties);
>   $node = node_submit($node);
>   node_save($node);
>   return $node;
> }
>
> On 1/26/08, adrian rossouw <adrian at bryght.com> wrote:
> >
> > On 25 Jan 2008, at 4:56 PM, Daniel F. Kudwien wrote:
> >
> > >
> > > It is.  But it's the most advanced and flexible solution currently
> > > available
> > > for Drupal.  Many folks have contributed to ImportExport API,
> > > however the
> > > module seems to be unmaintained currently.  The API docs are in an
> > > pre-alpha
> > > state, too.  So it is definitely not easy to understand, how
> > > ImportExport
> > > API works, and how it could work out for your requirements.
> > it's a query builder. just like views / cck.
> >
> > and it has it's own set of _schema like hooks, which is what's
> > annoying about it.
> > since you get to type everything out ... again.
> >
> > I once wrote a install profile generator for it for drupal 4.7, but i
> > didn't have the time nor energy
> > to update ieapi for d5
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/development/attachments/20080128/93d5302f/attachment-0001.htm 


More information about the development mailing list