Парсер - поле Universally Unique ID (UUID) в таблице NODE не вставляется

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

Аватар пользователя oOLokiOo oOLokiOo 21 сентября 2012 в 13:35

Доброго времени суток.
Делаю парсер, который создаёт ноды.
Со всеми полями проблем нет, но вот в поле uuid ничего не вставляется. Причём, стоит плагин "Universally Unique ID", в его настройках можно сделать "Create Missing UUIDs", и тогда это поле заполняется везде где было пустым, но хотелось бы на лету это делать.

Функцию для генерации uuid использую вот такую:

<?php
function mymodule_uuid_generator() {
    
// The field names refer to RFC 4122 section 4.1.2.
    
return sprintf('%04x%04x-%04x-%03x4-%04x-%04x%04x%04x',
        
// 32 bits for "time_low".
        
mt_rand(065535), mt_rand(065535),
        
// 16 bits for "time_mid".
        
mt_rand(065535),
        
// 12 bits before the 0100 of (version) 4 for "time_hi_and_version".
        
mt_rand(04095),
        
bindec(substr_replace(sprintf('%016b'mt_rand(065535)), '01'62)),
        
// 8 bits, the last two of which (positions 6 and 7) are 01, for "clk_seq_hi_res"
        // (hence, the 2nd hex digit after the 3rd hyphen can only be 1, 5, 9 or d)
        // 8 bits for "clk_seq_low" 48 bits for "node".
        
mt_rand(065535), mt_rand(065535), mt_rand(065535)
    );
}
?>

но это всё равно. не принимаются любые значения...

В чём может быть проблема?

Комментарии

Аватар пользователя man-1982 man-1982 21 сентября 2012 в 13:52

а кусочек кода, где происходит вызов mymodule_uuid_generator.
(Я по быстрому прогуглил... не нашел hook_hook_uuid_generator).
Может его просто не вызвали, при сохранении ноды?

Аватар пользователя oOLokiOo oOLokiOo 21 сентября 2012 в 14:11

mymodule_uuid_generator() - самописный.

в коде примерно так дёт:

<?php
$node 
= new stdClass();
$node->type 'article';
...
$node->uuid gps_xml_import_uuid_generator();
node_save($node);
?>

ну даже если вместо gps_xml_import_uuid_generator() туда вписать любое значение вручную, всё равно не проходит..

Аватар пользователя man-1982 man-1982 21 сентября 2012 в 16:16

ясно... тогда такой вариант...
качаем модуль devel ... включаем..
Далее идем in function node_save и где нибудь возле строк

if ($node->is_new || !empty($node->revision)) {
      // When inserting either a new node or a new node revision, $node->log
      // must be set because {node_revision}.log is a text column and therefore
      // cannot have a default value. However, it might not be set at this
      // point (for example, if the user submitting a node form does not have
      // permission to create revisions), so we ensure that it is at least an
      // empty string in that case.
      // @todo: Make the {node_revision}.log column nullable so that we can
      // remove this check.
      if (!isset($node->log)) {
        $node->log = '';
      }

ставим dpm($node);

далее создаем новую ноду в которой UIID генериться друпалом и смотрим что происходит... ну как то так...
з.ы
А поле UIID вообще есть в типе материала?

Аватар пользователя Orion76 Orion76 21 сентября 2012 в 18:56

"man-1982" wrote:
А поле UIID вообще есть в типе материала?

Вот и я думаю.. в стандартной ноде его нет... откуда оно?

Аватар пользователя man-1982 man-1982 21 сентября 2012 в 23:10

orion76 wrote:
Вот и я думаю.. в стандартной ноде его нет... откуда оно?

Ну как бы человек который пишет парсер... наверно, при создании типа материала, грузанулся вопросом дополнительно поля UUID или все же нет? Smile

Аватар пользователя Orion76 Orion76 22 сентября 2012 в 10:41

"man-1982" wrote:
дополнительно поля UUID

Если это так, то не :

<?php
$node
->uuid gps_xml_import_uuid_generator();
?>

а, как минимум:

<?php
$node
->uuid[LANGUAGE_NONE][0]['value'] = gps_xml_import_uuid_generator();
?>
Аватар пользователя man-1982 man-1982 22 сентября 2012 в 13:56
<?php
$node
->uuid[LANGUAGE_NONE][0]['value'] = gps_xml_import_uuid_generator();
?>

Ну если исходить из "теории подсказки", то

<?php
$node
->uuid gps_xml_import_uuid_generator();
?>

, а если исходить из теории "напишите за меня код", то конешно ваш вариант правильней и предпочтительней...

Аватар пользователя oOLokiOo oOLokiOo 24 сентября 2012 в 16:23

"man-1982" wrote:
Ну как бы человек который пишет парсер... наверно, при создании типа материала, грузанулся вопросом дополнительно поля UUID или все же нет? :)

ну я не знаю, стандартное оно или нет, но в базе оно было Smile
соответственно,нужно его заполнять.

"orion76" wrote:

<?php
$node->uuid[LANGUAGE_NONE][0]['value'] = gps_xml_import_uuid_generator();
?>

так тоже не катит...