Drupal的自动节点标题和node_save?

时间:2009-09-27 08:27:32

标签: drupal

我正在使用自动节点标题,它将生成节点的标题。但是,当我使用node_save创建节点时,这不会发生。见下文:

function save_contact($firstName, $lastName, $email, $showErrors = false) {

   global $user;

   $edit = array();
   $edit['type'] = 'contact';
   $edit['uid'] = $user->uid;
   $edit['name'] = $user->name;
   $edit['promote'] = 0;
   $edit['comment'] = 0;
   $edit['status'] = 1;

   $edit['field_contact_name'][0]['value'] = $firstName; // NOTE
   $edit['field_contact_surname'][0]['value'] = $lastName; // NOTE
   $edit['field_contact_email'][0]['email'] = $email; // NOTE
   $edit['title'] = $firstName.' '.$lastName; // NOTE

   node_invoke_nodeapi($edit, 'contact');
   node_validate($edit);
   $node = node_submit($edit);
   node_save($node);


}

save_contact("NAME", "SURNAME", "me@bla.com");

生成节点时,标题变为:“[field_contact_name-formatted] [field_contact_surname-formatted]”而不是“NAME SURNAME”。

知道为什么吗?我猜测自动节点标题没有提到我输入的值,或者标题生成可能发生在我指定值的时间点之前。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

auto_nodetitle.module

第74行

  

return empty($node->auto_nodetitle_applied) && ($setting = auto_nodetitle_get_setting($node->type)) && !($setting == AUTO_NODETITLE_OPTIONAL && !empty($node->title));

按照这种逻辑,您是否在auto_nodetitle中包含了联系人内容类型?如果 contact 仅被“选择”覆盖,那么在此处设置标题将阻止模块执行。

答案 1 :(得分:1)

我这样修好了:

  $edit['field_contact_name'] = array();
$edit['field_contact_name'][0]['value'] = 
    $edit['field_contact_name'][0]['safe'] = 
        $edit['field_contact_name'][0]['view'] = $firstName;

$edit['field_contact_surname'] = array();
$edit['field_contact_surname'][0]['value'] = 
    $edit['field_contact_surname'][0]['safe'] =
        $edit['field_contact_surname'][0]['view'] = $lastName;

$edit['field_contact_email'] = array();
$edit['field_contact_email'][0]['email'] =
    $edit['field_contact_email'][0]['safe'] = 
        $edit['field_contact_email'][0]['view'] = $email;

换句话说,我还必须指定安全和查看字段。