[РЕШЕНО]PHP код при создании ноды

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

Аватар пользователя tundra tundra 3 июля 2014 в 4:02

Как при создании ноды И при повторном сохранении ноды выполнить PHP код?

В модуле node.modele есть:
function node_save(&$node) - это я так понимаю первичное создание ноды (так или нет?)

и где функция для пересохранения уже существующей ноды?

Комментарии

Аватар пользователя tundra tundra 3 июля 2014 в 11:32

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';
}
}
?>
Где здесь вставить код для моих действия с ТЕКУЩЕЙ нодой?

Аватар пользователя tundra tundra 3 июля 2014 в 14:52

Разобралась. Думаю, еще кому-то пригодится...

Задача - при создании (только при первом создании, при повторном сохранении не надо) ноды определенного типа (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();
}
?>

Аватар пользователя drupby drupby 3 июля 2014 в 15:36

"tundra" wrote:
// определяем тип текущей ноды

объект $node разве не содержит тип ноды?

данная задача решается написанием своего модуля и имплементацией в нем hook_nodeapi, ядро изменяется в крайних случаях, после обновления ядра опять полезете по-новой его дербанить?

Аватар пользователя tundra tundra 3 июля 2014 в 20:34

с типом до меня тоже дошло, только с запозданием. А с написанием своего модуля и имплементацией в нем hook_nodeapi - это я буду очень долго разбираться, хоть это и правильно. Модуль создать - это смогу, но вот с nodeapi - вообще не понятно что делать. Может, ссылку толковую подкините, кроме сухой документации?