2012-01-25 3 views
1

Я пытаюсь вставить значения для поля узла из настраиваемого модуля. Значение будет вставлено только из этого модуля, и тогда операция для этого узла не будет выполнена, поэтому крючок не рассматривается. Я попытался напрямую вставить значения в таблицы field_data _... и field_revision _.... но я обнаружил, что drupal также сохраняет значения (сериализованные) в таблицах field_config и field_config_instance как blob. поскольку я только вставляю значения в две таблицы, drupal не считывает значения, которые я вставил для узлов. Я не мог понять сериализацию, хранящуюся в БД. поэтому я ищу метод, который поможет мне вставлять значения через API или любой другой аккуратный способ.Вставка значения поля узла программно в drupal 7

Любая помощь по той вещи, которую я пытаюсь выполнить, была бы замечательной. Спасибо

EDIT: после просмотра сериализованного содержимого таблицы field_config. Я понял, что сериализованные данные представляют собой просто конфигурацию поля и вставляются в таблицу при первом сохранении. Моя проблема решена путем сохранения первого значения через admin/content, и теперь мои прямые данные, вставленные в DB, ​​доступны узлу. это сериализованные данные, которые у меня есть:

a:7: 
    {s:12:"translatable"; 
    s:1:"0"; 
    s:12:"entity_types"; 
    a:0:{} 
    s:8:"settings"; 
    a:3: 
     {s:9:"precision"; 
     s:2:"10";s:5:"scale"; 
     s:1:"2"; 
     s:17:"decimal_separator"; 
     s:1:","; 
     } 
    s:7:"storage"; 
    a:5: 
     {s:4:"type"; 
     s:17:"field_sql_storage"; 
     s:8:"settings"; 
     a:0:{} 
     s:6:"module"; 
     s:17:"field_sql_storage"; 
     s:6:"active"; 
     s:1:"1"; 
     s:7:"details"; 
     a:1: 
      {s:3:"sql"; 
      a:2: 
       {s:18:"FIELD_LOAD_CURRENT"; 
       a:1: 
        {s:22:"field_data_field_total"; 
        a:1: 
         {s:5:"value"; 
         s:17:"field_total_value"; 
         } 
        } 
       s:19:"FIELD_LOAD_REVISION"; 
       a:1: 
        {s:26:"field_revision_field_total"; 
        a:1: 
         {s:5:"value"; 
         s:17:"field_total_value"; 
         } 
        } 
       } 
      } 
    } 
    s:12:"foreign keys"; 
    a:0:{} 
    s:7:"indexes"; 
    a:0:{} 
    s:2:"id"; 
    s:2:"34"; 
    } 
+0

только прямая вставка БД, как я упомянул в сообщении, ничего больше. – vatzcar

+0

У вас есть код, на который мы можем смотреть? – SpaceBeers

+1

На самом деле проблема решена. Я редактировал сообщение и подробно рассказывал об этом. Спасибо SpaceBeers. – vatzcar

ответ

3

Надеюсь, это вам поможет.

$node = new stdClass(); 
$node->uid = 1; 
$node->name = 'admin'; 
$node->type = 'page'; 
$node->language = 'und'; 
$node->title = 'Your title'; 
$node->status = 1; 
$node->promote = 0; 
$node->sticky = 0; 
$node->created = timestamp; 
$node->field_description = array(
    'und' => array(
     array(
      'value' => 'asdasd' 
     ) 
    ) 
); 
$node->nid = 1; // define nid if you wish to update existing node 
// if you wouldn't define $node->nid then new node would be created, 
// otherwise node would be updated with you data provided for all 
// fields which you'll list here. 

... 
// other node's fields 

node_save_action($node); 
+0

Вы должны использовать константу 'LANGUAGE_NONE' вместо строки языка' 'und''. – ovi

+0

Да, это, наверное, так. Но это всего лишь пример ... если у вас будет многоязычный сайт, вы будете использовать '' en'', '' fr'' или что-то еще. –

 Смежные вопросы

  • Нет связанных вопросов^_^