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

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)
    );
}
?>

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

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

Комментарии

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

21 сентября 2012 в 13:52

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() туда вписать любое значение вручную, всё равно не проходит..

21 сентября 2012 в 14:11

ясно... тогда такой вариант...
качаем модуль 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 вообще есть в типе материала?

21 сентября 2012 в 16:16

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

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

21 сентября 2012 в 18:56

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

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

21 сентября 2012 в 23:10

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

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

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

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

<?php
$node
->uuid[LANGUAGE_NONE][0]['value'] = gps_xml_import_uuid_generator();
?>
22 сентября 2012 в 10:41
<?php
$node
->uuid[LANGUAGE_NONE][0]['value'] = gps_xml_import_uuid_generator();
?>

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

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

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

22 сентября 2012 в 13:56

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

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

"orion76" wrote:

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

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

24 сентября 2012 в 16:23