我正在使用自动节点标题,它将生成节点的标题。但是,当我使用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”。
知道为什么吗?我猜测自动节点标题没有提到我输入的值,或者标题生成可能发生在我指定值的时间点之前。
有什么想法吗?
答案 0 :(得分:1)
第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;
换句话说,我还必须指定安全和查看字段。