题
我遇到了以下问题,试图创建从Drupal 7到Drupal 6安装的节点。目标Drupal站点正在运行服务3.x。
这是我的代码:
$base_url = $params['path'];
$data = array(
'username' => $params['username'],
'password' => $params['password'],
);
$data = http_build_query($data, '', '&');
$headers = array();
$options = array(
'headers' => array('Accept' => 'application/json'),
'method' => 'POST',
'data' => $data
);
$response = drupal_http_request($params['path'] . '/user/login', $options);
$data = json_decode($response->data);
// Check if login was successful
if ($response->code == 200) {
// Now recycle the login cookie we recieved in the first request
$options['headers']['Cookie'] = $data->session_name . '=' . $data->sessid;
// Create a new node
$data = array(
'node' => array (
'type' => 'cloudnode',
'title' => 'node1',
'field_ip_address' => array ('value' => '1.2.3.4'),
)
);
$options['data'] = http_build_query( $data, '', '&');
$options['method'] = 'POST';
$response = drupal_http_request($base_url . '/node', $options);
}
else {
die ('Failed to login');
}
我得到200个回应;正在创建节点,但某种程度上根本不考虑我的“ field_ip_address” cck字段。
我尝试了任何类型的变体,但它们不起作用。周围也没有太多文档。
如果有人成功地使用REST创建节点,我将对任何帮助都非常感兴趣。
解决方案
即使实际字段仅限于单个值,CCK字段总是作为字段数组存储。
因此,您应该像:
'field_ip_address' => array(array('value' => '1.2.3.4'))
请注意,在Drupal 7中,字段值还通过语言进行分组,这是“ und”(language_none)如果该字段是语言不可思议的。因此,这就是这样:
'field_ip_address' => array('und' => array(array('value' => '1.2.3.4')))
从我的评论中复制,以便可以将问题标记为固定:)
不隶属于 drupal.stackexchange