Как вывести tid из массива $node->taxonomy

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

Аватар пользователя pavk@drupal.org pavk@drupal.org 16 августа 2010 в 21:07

Здравствуйте,

пытаюсь через хук nodeapi с опцией presave добавить данные в свою таблицу при сохранении новой ноды с введенным тэгом в поле терминов:

function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'presave' :

$term = array_keys($node->taxonomy);
$tid = $term->tid;

$record = array('tid' => $tid, 'link_type' => 0);
drupal_write_record('my_database_table', $record);

break;
}
}

В базу добавляется 0.

Где здесь ошибка?

Комментарии

Аватар пользователя pavk@drupal.org pavk@drupal.org 17 августа 2010 в 0:06

Спасибо за ответы)

$term = array_keys($node->taxonomy);
$tid = $term[0];

При таком обращении к массиву, print_r($tid); показывает номер термина, но данные по-прежнему не обрабатываются для сохранения в базу.

Что надо сделать? Неправильный тип данных?

Аватар пользователя xxandeadxx xxandeadxx 17 августа 2010 в 0:10

"<a href="mailto:pavk@drupal.org">pavk@drupal.org</a>" wrote:
Что надо сделать? Неправильный тип данных?

схему таблицы my_database_table из хука hook_shema скопируйте сюда

Аватар пользователя pavk@drupal.org pavk@drupal.org 17 августа 2010 в 0:50

function mymodule_schema() {
$schema['my_database_table'] = array(
'fields' => array(
'tid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
'uid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
),

'primary_key' => array('tid'),
'indexes' => array('uid' => array('uid')),
);

return $schema;
}

Полная строка, которой тестирую запись в базу из хука nodeapi: $record = array('tid' => $tid, 'uid' => $uid, 'link_type' => 0);

Аватар пользователя pavk@drupal.org pavk@drupal.org 17 августа 2010 в 21:45

после простой подстановки числа вместо $tid запись в базу с успехом проходит:

$record = array('tid' => 5, 'uid' => $uid, 'link_type' => 0);

А вот попытка подставить результат обращения к массиву по индексу по прежнему не срабатывает, хотя проверка переменной $tid через is_int() показывает TRUE

Не хочу записывать данные в базу минуя API. Подскажите, есть ли вариант, не меняя схему существующей таблицы что-нибудь сделать?