Вставка значения поля узла программно в drupal 7

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

любая помощь в том, что я пытаюсь выполнить, была бы отличной. Спасибо

РЕДАКТИРОВАТЬ: просмотрев сериализованное содержимое таблицы field_config, я понял, что сериализованные данные - это просто конфигурация поля, и они вставляются в таблицу при первом сохранении. Моя проблема решена путем сохранения первого значения через admin/content, и теперь мои прямые данные, вставленные в БД, доступны для узла. это сериализованные данные, которые у меня есть:

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";
    }

person vatzcar    schedule 25.01.2012    source источник
comment
просто прямая вставка БД, как я уже упоминал в посте, ничего больше.   -  person vatzcar    schedule 25.01.2012
comment
У вас есть какой-нибудь код, который мы можем посмотреть?   -  person SpaceBeers    schedule 25.01.2012
comment
На самом деле проблема решена. Я отредактировал сообщение и подробно рассказал об этом. Спасибо SpaceBeers.   -  person vatzcar    schedule 25.01.2012


Ответы (1)


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

$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);
person Vlad Stratulat    schedule 25.01.2012
comment
Лучше использовать константу LANGUAGE_NONE вместо языковой строки 'und'. - person ovi; 29.03.2012
comment
Да, наверное, так. Но это просто пример... если бы у вас был многоязычный сайт, вы бы использовали 'en', 'fr' или что-то еще. - person Vlad Stratulat; 29.03.2012