Программное создание ноды и добавление к ней изображения в Drupal 7
В этой статье описывается программное создание ноды, загрузка и прикрепление к ней изображений.
Бывают задачи, где необходимо программно создавать ноды в Drupal 7, а так же изменять значения её полей, таких как изображения, содержимое, категорию и другие.
Приведу пример. Есть интернет магазин, который отдаёт xml файл с выгрузкой всех своих товаров. Нашему сайту необходимо эту выгрузку скачать себе, распарсить и добавить/обновить товары в своём каталоге.
Первое, что нужно сделать это создать нужную ноду, с которой будем работать. Для этого нужно объявить следующий объект:
12345678910111213141516171819202122
$node = (object) array(
'title' => 'Эта нода создана программно',
'body' => array(
LANGUAGE_NONE => array(
0 => array(
'value' => 'Текст программно созданной ноды',
'summary' => 'Анонс программно созданной ноды',
'format' => 'filtered_html',
)
),
),
'type' => 'article',
'language' => LANGUAGE_NONE,
'uid' => 1,
);
Следующим шагом нужно вызвать drupal функцию node_object_prepare (ссылка на докумендацию Drupal 7). Функция "подготовит" объект для Drupal 7, установит недостающие значения и вызовет хук hook_node_prepare.
1
node_object_prepare($node);
Здесь всё просто. Нужно скачать изображение в папку с файлами Drupal, создать объект файла и добавить его к нашей ноде.
12345678910111213
$img_url = 'https://nikitakiselev.ru/images/logo.png';
$data = drupal_http_request($image);
if($data->code==200){
$file = file_save_data($data->data, 'public://' . basename($img_url));
if ($file) {
$node->field_image[LANGUAGE_NONE][] = (array)$file;
}
}