Вопрос по хуку hook_node_insert

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

Аватар пользователя mihon_kri mihon_kri 18 декабря 2014 в 16:56

Добрый день!
Прошу прощения за перепост, но к сожалению в предыдущем посте http://www.drupal.ru/node/114605 мне ничего так ни кто толком разъяснить не смог. Задача в принципе та же. Есть простенькая таблица, лежащая в базе вместе с таблицами Друпала назовем её tovar (id товара, название товара, артикул и количество товара). Создан тип материала с полями (Idтовара, наименование товара и место хранения товара). Нужно что бы при добавлении содержимого этого типа материала вписав в поле Idтовара его id и нажатии кнопки "Сохранить" происходило обращение к таблице tovar и по id вытаскивалось название товара и подгружалось в эту ноду. Погуглив нашел хук hook_node_insert, но так и не понял, как мне его использовать(((( Если кто то сможет на примере объяснить как это сделать или скинет ссылку на русскоязычный пример буду очень признателен.

Комментарии

Аватар пользователя Inj Inj 18 декабря 2014 в 21:25

Помню когда-то сам смотрел на хуки квадратными глазами Smile
Если коротко, то нужно создать свой модуль, который будет состоять из двух файлов:
ваш_модуль.info
ваш_модуль.module

в первом будет описание (инфы в нете, в том числе и рускоязычной пруд пруди), во втором соб-сно сам хук:

<?php

function ваш_модуль_node_insert($node) {

/*  тут Ваш код,
*   выполняемый при создании ноды
*/

}

вот и весь файл. "ваш_модуль" заменить на придуманное название для новосозданного модуя

Аватар пользователя mihon_kri mihon_kri 18 декабря 2014 в 22:22

Inj wrote:
Помню когда-то сам смотрел на хуки квадратными глазами Smile
Если коротко, то нужно создать свой модуль, который будет состоять из двух файлов:
ваш_модуль.info
ваш_модуль.module

в первом будет описание (инфы в нете, в том числе и рускоязычной пруд пруди), во втором соб-сно сам хук:

<?php

function ваш_модуль_node_insert($node) {

/*  тут Ваш код,
*   выполняемый при создании ноды
*/

}

вот и весь файл. "ваш_модуль" заменить на придуманное название для новосозданного модуя


Это в первом же посте про создание модуля можно найти))))) Трудность как раз не в создании 2-х файликов (с этим и первоклассник справится), а в том что нет примера с описанием что откуда берется при использовании хука в коде модуля... А по поводу нанять кого-нибудь - хотелось самому разобраться что к чему, вот в чем дело...

Аватар пользователя Orion76 Orion76 18 декабря 2014 в 22:28

"mihon_kri" wrote:
ссылку на русскоязычный пример буду очень признателен

ссылка google.com
запросы:
drupal hook
hook_node_insert

узнавал - гугл вкурсе..

Аватар пользователя Inj Inj 18 декабря 2014 в 23:05

ну так а что неясно? Эта функция будет выполняться при добавлении новой ноды. Все ёё данные хранятся в переменной $node. только забыл амперсанд

function ваш_модуль_node_insert(&$node) {

теперь все Ваши безобразия, творимые с этой нодой в ней же и останутся.
Фактически

"mihon_kri" wrote:
Нужно что бы при добавлении содержимого этого типа материала вписав в поле Idтовара его id и нажатии кнопки "Сохранить" происходило обращение к таблице tovar и по id вытаскивалось название товара и подгружалось в эту ноду.

соответственно в этой функции написать что

if ($node->type == 'your_type' {

далее, насколько я понимаю, запрос в базу к вашей таблице с целью получения названия товара. Потом

$node->you_field['und'][0]['value'] = Вытянутое_из_базы_название; //просьба гуру не пинать про ленгвидж и прочую хрень, пример из разряда попроще

Вот и весь сказ

Аватар пользователя drupby drupby 18 декабря 2014 в 23:57

"RxB" wrote:
Как будто кто-то знает о разнице между 5.2 и 5.3++ пыхами

дык никто и не догадывается даже к чему ты это вообще сказал

Аватар пользователя Inj Inj 19 декабря 2014 в 0:02

"drupby" wrote:
А зачем объект ноды передавать по ссылке?

дык, что бы заполненное поле ноды сохранилось нужно либо тянуть ноду ссылкой, либо потом ретурн делать, нет?

На звание гуру не претендую, всегда готов учиться дальше, так что выслушаю все замечания. Будет полезно и мне, и создателю топа.

Аватар пользователя drupby drupby 19 декабря 2014 в 0:28

"Inj" wrote:
дык, что бы заполненное поле ноды сохранилось нужно либо тянуть ноду ссылкой, либо потом ретурн делать, нет?

ну дык объект как бы и без передачи по ссылке изменится (http://php.net/manual/ru/language.oop5.references.php и вот пример http://codepad.org/HN5kTkVc), а во-вторых hook_node_insert не для того чтобы объект ноды менять

а по теме топика, так в документации по api практически такой же пример и приведен https://api.drupal.org/api/drupal/modules!node!node.api.php/function/hook_node_insert/7, только запрос минимально подправить

Аватар пользователя Inj Inj 19 декабря 2014 в 0:20

"drupby" wrote:
ну дык объект как бы и без передачи по ссылке изменится

а можно чуток подробнее, плз? Хоть в какую сторону гуглить чтобы про это почитать. Почему измениться? Дело с объектом, друпалом, версией пхп или ещё чего? Мне б только направление..

"drupby" wrote:
во-вторых hook_node_insert не для того чтобы объект ноды менять

про это, каюсь, даж не вчитывался. Вопрос стоял как применить, а подобрать нужный, думаю автор сможет и сам