[РЕШЕНО] hook_nodeapi и изменение $node->title

Главные вкладки

Аватар пользователя beerman beerman 6 января 2009 в 15:53

<?php
function timerko_form_alter(&$form, $form_state, $form_id) {
switch($form_id) {
case 'expertopinion_node_form':
$form['title']['#weight'] = -10;
$form['title']['#value'] = (!$form['title']['#value']) ? 'Дефолтный заголовок' : '';
$form['title']['#type'] = 'hidden';
break;
}
return;
}

function timerko_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'insert':
case 'update':
if ($node->type == 'expertopinion') {
$expert_nid = $node->field_expertreference[0]['nid'])
$expert = db_fetch_array(db_query("SELECT title FROM node WHERE nid=%d", $expert_nid);
$node->title = check_plain($expert['title']);
print_r($node);
}
break;
}
}
?>

print_r() в timerko_nodeapi() выдает $node->title который нужен, а вот записывается в базу все равно как "Дефолтный заголовок".
Что я не так делаю?
PS. $node->field_expertreference[0]['nid'] - поле Node Reference

Комментарии

Аватар пользователя beerman beerman 6 января 2009 в 17:40

<?php
function timerko_form_alter(&$form, $form_state, $form_id) {
switch($form_id) {
case 'expertopinion_node_form':
$form['title']['#weight'] = -9;
if (!$form['title']['#value']) {
$form['title']['#default_value'] = 'Дефолтный заголовок';
}
$form['title']['#type'] = 'hidden';
break;
}
return;
}

function timerko_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
//print '

'.$op.'

';
switch ($op) {
case 'insert':
case 'update':
if ($node->type == 'expertopinion') {
$expert = db_fetch_array(db_query("SELECT title FROM node WHERE nid=%d",$node->field_expertreference[0]['nid']));
$node->title = check_plain($expert['title']);
}
break;
}
}
?>

Аватар пользователя beerman beerman 6 января 2009 в 18:26

это скорее к генерации форм подходит. в моем случае поменять title надо уже в процессе сохранения записи в базе.
что самое удивительное, приведенный код прекрасно работает в "5-ке"

Аватар пользователя beerman beerman 6 января 2009 в 18:48

Решение найдено:
case 'insert' и case 'update'
надо заменить на case 'presave'
т.о. код будет выглядеть так:
<?php
function timerko_form_alter(&$form, $form_state, $form_id) {
switch($form_id) {
case 'expertopinion_node_form':
$form['title']['#weight'] = -9;
$form['title']['#value'] = ($form['title']['#value']) ? $form['title']['#value'] : 'Дефолтный заголовок';
}
$form['title']['#type'] = 'hidden';
break;
}
return;
}

function timerko_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'presave':
if ($node->type == 'expertopinion') {
$expert = db_fetch_array(db_query("SELECT title FROM node WHERE nid=%d",$node->field_expertreference[0]['nid']));
$node->title = check_plain($expert['title']);
}
break;
}
}
?>