В этой статье описывается программное создание ноды, загрузка и прикрепление к ней изображений.
Бывают задачи, где необходимо программно создавать ноды в Drupal 7, а так же изменять значения её полей, таких как изображения, содержимое, категорию и другие.
Приведу пример. Есть интернет магазин, который отдаёт xml файл с выгрузкой всех своих товаров. Нашему сайту необходимо эту выгрузку скачать себе, распарсить и добавить/обновить товары в своём каталоге.
Программное создание ноды Drupal 7
Первое, что нужно сделать это создать нужную ноду, с которой будем работать. Для этого нужно объявить следующий объект:
$node = (object) array(
// Заголовок ноды
'title' => 'Эта нода создана программно',
// Содержимое ноды
'body' => array(
LANGUAGE_NONE => array(
0 => array(
// Основной текст ноды
'value' => 'Текст программно созданной ноды',
// Анонс
'summary' => 'Анонс программно созданной ноды',
// Формат текста: full_html, filtered_html
'format' => 'filtered_html',
)
),
),
// Тип материала, к которому относится нода
'type' => 'article',
'language' => LANGUAGE_NONE,
// uid пользователя, который создаёт ноду
'uid' => 1,
);
Следующим шагом нужно вызвать drupal функцию node_object_prepare
(ссылка на докумендацию Drupal 7). Функция "подготовит" объект для Drupal 7, установит недостающие значения и вызовет хук hook_node_prepare
.
node_object_prepare($node);
Добавление изображений к ноде
Здесь всё просто. Нужно скачать изображение в папку с файлами Drupal, создать объект файла и добавить его к нашей ноде.
// Путь до скачиваемого изображения
$img_url = 'https://nikitakiselev.ru/images/logo.png';
// Скачивание изображения в папку '/sites/default/files/files'
$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;
}
}