1. Пожалуйста, дайте рабочий пример кода с функцией.
<?php
function node_node_update() {
db_query('UPDATE {node} SET field_okaz_spisanie_done_value = 1 WHERE nid = %d', $node->nid);
}
?>
Так?
2. Как обратиться к $nid текущей ноды? Это %d или $node->nid?
3. В какой файл это прописывать - в node.module или в template.php?
4. Если надо провести действия только при обновлении определенного типа ноды (okaz_usluga), то как будет выглядеть функция? И в какой файл ее прописывать?
5. Как произвести изменения в ноде одновременно при создании этой ноды (или же сразу после ее создания)? В node.module есть:
<?php
function node_save(&$node) {
if ($node->is_new) {
_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 {
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';
}
}
?>
Где здесь вставить код для моих действия с ТЕКУЩЕЙ нодой?
Задача - при создании (только при первом создании, при повторном сохранении не надо) ноды определенного типа (okaz_usluga) нужно поменять поле в связанной таблице (связь по $node->nid)
В стандартных модулях выбираем модуль node. Там файл: node.module
Находим там:
<?php
function node_save(&$node) {
...
//сюда перед последней процедурой вставить наш код
//если нода создается впервые:
if ($node->is_new) {
// определяем тип текущей ноды
$my_type = db_result(db_query("SELECT type from {node} WHERE nid = %d", $node->nid));
// если тип совпадает с нужной нодой (okaz_usluga)
if ($my_type == 'okaz_usluga') {
// меняем поля
db_query("UPDATE {content_type_okaz_usluga} SET field_okaz_spisanie_done_value = 1 WHERE nid = %d", $node->nid);
}
}
// Clear the page and block caches.
cache_clear_all();
}
?>
данная задача решается написанием своего модуля и имплементацией в нем hook_nodeapi, ядро изменяется в крайних случаях, после обновления ядра опять полезете по-новой его дербанить?
с типом до меня тоже дошло, только с запозданием. А с написанием своего модуля и имплементацией в нем hook_nodeapi - это я буду очень долго разбираться, хоть это и правильно. Модуль создать - это смогу, но вот с nodeapi - вообще не понятно что делать. Может, ссылку толковую подкините, кроме сухой документации?
Комментарии
hook_node_update()
hook_nodeapi()
1. Пожалуйста, дайте рабочий пример кода с функцией.
<?php
function node_node_update() {
db_query('UPDATE {node} SET field_okaz_spisanie_done_value = 1 WHERE nid = %d', $node->nid);
}
?>
Так?
2. Как обратиться к $nid текущей ноды? Это %d или $node->nid?
3. В какой файл это прописывать - в node.module или в template.php?
4. Если надо провести действия только при обновлении определенного типа ноды (okaz_usluga), то как будет выглядеть функция? И в какой файл ее прописывать?
5. Как произвести изменения в ноде одновременно при создании этой ноды (или же сразу после ее создания)? В node.module есть:
<?php
function node_save(&$node) {
if ($node->is_new) {
_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 {
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';
}
}
?>
Где здесь вставить код для моих действия с ТЕКУЩЕЙ нодой?
Разобралась. Думаю, еще кому-то пригодится...
Задача - при создании (только при первом создании, при повторном сохранении не надо) ноды определенного типа (okaz_usluga) нужно поменять поле в связанной таблице (связь по $node->nid)
В стандартных модулях выбираем модуль node. Там файл: node.module
Находим там:
<?php
function node_save(&$node) {
...
//сюда перед последней процедурой вставить наш код
//если нода создается впервые:
if ($node->is_new) {
// определяем тип текущей ноды
$my_type = db_result(db_query("SELECT type from {node} WHERE nid = %d", $node->nid));
// если тип совпадает с нужной нодой (okaz_usluga)
if ($my_type == 'okaz_usluga') {
// меняем поля
db_query("UPDATE {content_type_okaz_usluga} SET field_okaz_spisanie_done_value = 1 WHERE nid = %d", $node->nid);
}
}
// Clear the page and block caches.
cache_clear_all();
}
?>
объект $node разве не содержит тип ноды?
данная задача решается написанием своего модуля и имплементацией в нем hook_nodeapi, ядро изменяется в крайних случаях, после обновления ядра опять полезете по-новой его дербанить?
с типом до меня тоже дошло, только с запозданием. А с написанием своего модуля и имплементацией в нем hook_nodeapi - это я буду очень долго разбираться, хоть это и правильно. Модуль создать - это смогу, но вот с nodeapi - вообще не понятно что делать. Может, ссылку толковую подкините, кроме сухой документации?