Здравствуйте,
пытаюсь через хук 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.
Где здесь ошибка?
Комментарии
Потому что тут ошибка:
$term = array_keys($node->taxonomy);
$tid = $term->tid;
array_keys возвращает массив, а строчкой ниже вы обращаетесь к нему как к объекту
Спасибо за ответы)
$term = array_keys($node->taxonomy);
$tid = $term[0];
При таком обращении к массиву, print_r($tid); показывает номер термина, но данные по-прежнему не обрабатываются для сохранения в базу.
Что надо сделать? Неправильный тип данных?
схему таблицы my_database_table из хука hook_shema скопируйте сюда
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);
после простой подстановки числа вместо $tid запись в базу с успехом проходит:
$record = array('tid' => 5, 'uid' => $uid, 'link_type' => 0);
А вот попытка подставить результат обращения к массиву по индексу по прежнему не срабатывает, хотя проверка переменной $tid через is_int() показывает TRUE
Не хочу записывать данные в базу минуя API. Подскажите, есть ли вариант, не меняя схему существующей таблицы что-нибудь сделать?
ну попробуйте
(int)$tid
. неплоха бы полный листинг кода