How to create a forum topic programmatically?

2020-06-24 08:10发布

问题:

I just gone through how to create forums and containers programmatically with the below link

http://www.unibia.com/unibianet/drupal/how-create-drupal-forums-and-containers-programmatically

But never see any post(google) which create forum topic pro-grammatically, whether i should go with node_save() or any alternative.

please help me guys,

Thanks, Edvin

回答1:

A quick, safe and easy way to create new nodes programmatically is to use node_save():

<?php
  // Construct the new node object.
  $node = new stdClass();

  // Set the values for the node
  $node->title = "My new forum topic";
  $node->body = "The body of my forum topic.\n\nAdditional Information";
  $node->type = 'forum';   // Your specified content type
  $node->created = time();
  $node->changed = $node->created;
  $node->status = 1;       // To have published, else use 0
  $node->promote = 1;      // If you want promoted to front page, else use 0
  $node->sticky = 0;
  $node->format = 1;       // Filtered HTML
  $node->uid = 1;          // UID of content owner
  $node->language = 'en';

  // If known, the taxonomy TID values can be added as an array.
  $node->taxonomy = array(2,3,1,);

  node_save($node);
?>


回答2:

Drupal 7 Examples :

To create new Forum

    $forum = new stdClass();
    $forum->name = uniqid();
    $forum->description = uniqid();
    $forum->parent = array(0);
    $forum->weight = 0;
    $forum->vid = variable_get('forum_nav_vocabulary', 0);
    taxonomy_term_save($forum);

To create new Topic

    $node = new stdClass();
    // Set the values for the node
    $node->title = "My new forum topic";
    $node->body = "The body of my forum topic.\n\nAdditional Information";
    $node->type = 'forum'; // Your specified content type
    $node->created = time();
    $node->changed = $node->created;
    $node->status = 1; // To have published, else use 0
    $node->comment = 2; // To have active, else use 0
    $node->uid = 1; // UID of content owner
    //Creates topic at the first "forum"
    $node->forum_tid = reset(array_keys(taxonomy_term_load_multiple(array(), 
    array('vid' => variable_get('forum_nav_vocabulary', 0))))); 
    $node->language = LANGUAGE_NONE;
    $node->taxonomy_forums[LANGUAGE_NONE][0]['tid'] = $node->forum_tid;
    node_save($node);

To create topic comments

    $comment = (object)array(
            'nid' => $node->nid,
            'pid' => 0,
            'cid' => 0,
            'uid' => 1,
            'mail' => '',
            'is_anonymous' => 0,
            'homepage' => '',
            'status' => COMMENT_PUBLISHED,
            'subject' => 'subject test ' . uniqid(),
            'language' => LANGUAGE_NONE,
            'comment_body' => array(
                LANGUAGE_NONE => array(
                    0 => array(
                        'value' => 'Comment Body ' . uniqid(),
                        'format' => 1
                    )
                )
            ),
        );
     comment_submit($comment);
     comment_save($comment);


回答3:

A forum topic is really just a node, so node_save is the best option as all the needed hooks will be called.



回答4:

Using D7 Entity API

global $user;
$options = array(
'type' => 'forum',
'uid' => $user->uid,
'status' => 1
);
$entity = entity_create('node', $options);
$wrapper = entity_metadata_wrapper('node', $entity);
$wrapper->title = 'Topic Title;
$wrapper->body = 'Topic Body;    
$terms = taxonomy_get_term_by_name ('General discussion','forums'); //names of tid and vid
$wrapper->taxonomy_forums = reset($terms)->tid;
$wrapper->save();