<?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
Комментарии
используй $form['title']['#default_value'] для установки значения по умолчанию.
без разницы. тот же эффект
полностью код показать можете? тот что после правки
<?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 '
';
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;
}
}
?>
возможно http://api.drupal.org/api/function/form_set_value
это скорее к генерации форм подходит. в моем случае поменять title надо уже в процессе сохранения записи в базе.
что самое удивительное, приведенный код прекрасно работает в "5-ке"
Решение найдено:
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;
}
}
?>