Вставка значения поля узла программно в Drupal 7 - PullRequest
1 голос
/ 25 января 2012

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

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

EDIT: посмотрев на сериализованное содержимое таблицы 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";
    }

1 Ответ

3 голосов
/ 25 января 2012

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

$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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...