Drupal 7 开发内部培训资料, 分头诗人

不用drupal的node_save方法,如何保存一个node

赞成!
0
否决!

诗人兄,你好!

我打算换另外一种PHP框架,做drupal数据node表的增删改查,但还是用drupal自己的后台管理。

请问是不是node和node_revision表内容一致就行了?

node表nid=1 vid=2

node_revision表nid=1 vid=2

我试着在这两个表里手工直接插入一样的数据,但是后台的内容管理,不显示的。

请指点,谢谢!

2 个回答

赞成!
0
否决!

其实你参考drupal_write_record() 的方式就可以知道如何写了。给你一个drupal_write_record() 写入节点内容的方法:

function amnode_save(&$node) {    //定义存储函数,如果有相同asin码就更新,没有就插入。
node_invoke_nodeapi($node, 'presave');
global $user;
$node->is_new = FALSE;
    $result = db_query('SELECT `nid`,`field_asin_value` FROM `content_type_story`');
    while($data = db_fetch_object($result)){
      if ($data->field_asin_value == $node->field_asin['0']['value']) {
        $node->is_new = TRUE;
        $node->vid = $data->nid;
        $node->nid = $data->nid;
      }else {
    if (empty($node->log)) {
      unset($node->log);
    }
}
    }
if (empty($node->created)) {
    $node->created = time();
}
$node->changed = time();
$node->timestamp = time();
$node->format = isset($node->format) ? $node->format : FILTER_FORMAT_DEFAULT;
if ($node->is_new != 1) {
      echo 'aaa';
    _node_save_revision($node, $user->uid);
    drupal_write_record('node', $node);
    db_query('UPDATE {node_revisions} SET nid = %d WHERE vid = %d', $node->nid, $node->vid);
    $op = 'insert';
}
else {
      echo 'bbb';
    drupal_write_record('node', $node, 'nid');
    if (!empty($node->revision)) {
      _node_save_revision($node, $user->uid);
      db_query('UPDATE {node} SET vid = %d WHERE nid = %d', $node->vid, $node->nid);
    }
    else {
      _node_save_revision($node, $user->uid, 'vid');
    }
    $op = 'update';
}
node_invoke($node, $op);
node_invoke_nodeapi($node, $op);
node_access_acquire_grants($node);
cache_clear_all();
}
赞成!
0
否决!

另外框架建议用symfony 2 或者yii。