[development] programmatic creation of node
Ashraf Amayreh
mistknight at gmail.com
Sat Mar 8 18:30:33 UTC 2008
For better or worse, this is the code I use in the aggregation module and it
seems to be working flawlessly. This is in the yet to be released release
though (drupal 5). If there's a better way I'd be glad to know it.
(INSERT)
$node = new stdClass();
$node->title = "{$XML->name}";
$node->body = "{$XML->description}";
$node->eid = $eid;
node_save($node);
module_invoke_all('nodeapi', $node, 'insert', NULL, NULL);
--------------
(UPDATE)
$node = node_load(array('nid' => 5));
$node->title = "{$XML->name}";
$node->body = "{$XML->description}";
$node->eid = $eid;
node_save($node);
module_invoke_all('nodeapi', $node, 'update', NULL, NULL);
On Sat, Mar 8, 2008 at 8:01 PM, Larry Garfield <larry at garfieldtech.com>
wrote:
> Using drupal_execute() or drupal_execute_macro() is a nasty, evil, slow,
> and
> ugly way to programmatically create users and nodes. It's also usually
> the
> only way that will reliably work. :-) I have, however, run into cases
> where
> it does not. For those, I have to fall back to creating the $node object
> myself and saving it. Fortunately I've only had to do that for one-off
> imports, so I could hard-code defaults.
>
> There is no real good answer here, not until we get a real Data API in
> core.
> We're working on it. :-)
>
> On Saturday 08 March 2008, Moshe Weitzman wrote:
> > In drupal5, you should call hook_node_submit() and
> > hook_nodeapi('submit') before node_save(). that will assure that any
> > group info gets saved (for example).
> >
> > In d6 this is not needed since those submit hooks became
> > hook_nodeapi(pre_save) and that happens from within node_save().
> >
> > drupal_execute is also a valid way. the node_load() is a little
> > expensive but this is a very clean way to proceed. if it is working
> > for you, i would proceed like this.
> >
> > On Sat, Mar 8, 2008 at 10:53 AM, Novák Áron <aron at novaak.net> wrote:
> > > Hi!
> > >
> > > While the development of FeedAPI, i faced with a problem. FeedAPI has
> to
> > > create nodes programmatically, i believed that this is a really easy
> > > thing to do, feedapi now works like this:
> > > $node->data1 = "foo";
> > > $node->data2 = "bar";
> > > node_object_prepare($node); // this is about the default values
> > > node_save($node);
> > >
> > > But I got a report that this is not a good way to do:
> > > http://drupal.org/node/196273
> > > Summary:
> > > "node_object_prepare() and node_prepare() functions are meant to
> > > simulate the demonstration of a node"
> > > And some users, who use FeedAPI + 3rd party modules together, really
> > > experience bugs around node creation / handling:
> > > http://drupal.org/node/195105 (summary: the core forum module uses
> > > form_alter to pass taxonomy-like data. And this data is lost now.)
> > >
> > > Can you suggest me a perfect way to handle this problem?
> > > mustafau (http://drupal.org/user/207559) suggested to use
> > > drupal_execute($form_id, $form_values), but in this case, i had
> another
> > > problem: drupal_execute has no useful return value and $node
> structure
> > > remains unaltered, so i had to do a node_load after this, which is
> quite
> > > expensive.
> > >
> > > Thanks,
> > >
> > > Aron Novak
>
>
> --
> Larry Garfield AIM: LOLG42
> larry at garfieldtech.com ICQ: 6817012
>
> "If nature has made any one thing less susceptible than all others of
> exclusive property, it is the action of the thinking power called an idea,
> which an individual may exclusively possess as long as he keeps it to
> himself; but the moment it is divulged, it forces itself into the
> possession
> of every one, and the receiver cannot dispossess himself of it." --
> Thomas
> Jefferson
>
--
Ashraf Amayreh
http://blogs.aamayreh.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/development/attachments/20080308/34de40f9/attachment.htm
More information about the development
mailing list