Еще одна шпаргалка по Drupal 7. Мы создадим публикацию из PHP, добавим пользовательские поля и даже загрузим файл (изображение) в поле соответствующего типа.
Сначала мы создадим структуру публикации (объект node). Нам понадобится указать данные, без которых не может обойтись ни одна публикация в drupal.
Я создаю данные от лица текущего пользователя, но если скрипт должен работать во время сессии анонима, то создать контент лучше от лица админа.
1 2 3 4 5 6 7 8 9 |
global $user; $node = (object) array( 'uid' => $user->uid, 'title' => 'Название статьи', 'status' => 1, 'type' => 'article', 'language' => 'ru' ); |
Тип публикации ‘article’ — один из дефолтных типов публикации в друпал. Публикация хранит текст статьи в поле body.
1 2 3 4 5 6 7 8 9 |
$node->body = array( LANGUAGE_NONE => array( array( 'summary' => 'краткое содержание, аннотация', //не обязательное 'value' => 'текст статьи', 'format' => 'full_html', // типичный формат публикаций ) ) ); |
Другие кастомные поля, если вы добавляли их в article, можно инициализировать аналогично body. Пример для инициализации кастомного поля field_order:
1 2 3 4 5 6 7 |
$node->field_order = array( LANGUAGE_NONE => array( array( 'value' => 'какое-то значение', ) ) ); |
Еще artice содержит поле field_image.
Как загрузить изображение при создании ноды из кода?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$file_path = '/путь/до/файла'; //в примере можно были не проверять //существует ли файл, но т.к. пример переписывался //из рабочего куска кода, то кое какие проверки //просочились :) if (file_exists($file_path)) { $file = (object)array( 'uid' => $user->uid, 'uri' => $file_path, 'filename' => basename($file_path), 'filemime' => file_get_mimetype($file_path), //картинки могут иметь мета данные в виде alt и title 'alt' => 'alt изображения', 'title' => 'заголовок изображения', ); //если после public:// указать какой то путь, то //он должен уже быть создан заранее $file = file_copy($file, 'public://' . $file->filename); if ($file) { $node->field_image = array( LANGUAGE_NONE => array( (array)$file ) ); } } else drupal_set_message('Не найден файл - ' . $file_path); |
Все готово для сохранения объекта публикации. При сохранении будут активированы зацепки подключенных модулей (к примеру, pathauto и т.п.).
1 |
node_save($node); |