Импорт записей с картинками и произвольными url в drupal 7

Делал я это давно, потому может какие то принципы уже поменялись,да и тема избита, но т.к последнее время ничего интересного на друпале делать не приходилось, может кому пригодится это.

Ниже приведен код метода класса импортера, который отвечает  непосредственно за добавление новых нод в drupal. В других методах класса было подключение к бд, парсинг нужных данных с другого сайта и т.п, я решил не приводить код всего класса для компактности, если кому будет интересно, пишите в комментариях — я выложу. И так:

 

require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); //подключаем стартовые классы друпала
public function InsertNode($data) {
/*на входе я получал данные которые спарсил
в двух массивах т.к получал 2 обьекта*/

$first = $data[0];//первый обьект, для вас это не важно, вы можете получать данные как вам удобно

$second = $data[1];//второй обьект
$image = $first->image_name();//получаю имя фото
$bodytext = $second->text;//текст ноды
$cnc = $first->cnc;//url обьекта(у меня стояла задача сохранить урлы при импорте)
$node = new stdClass(); // создаем обьект пустой ноды
$node->type = "team"; // задаем тип материала
node_object_prepare($node); // устанавливаем стандартные значения, необходимые для сохранения
$node->title = $second->fio; // ставим заголовок ноды
$node_lang='ru';//ставим язык

$body_language = field_valid_language($node_lang);//валидируем язык

$text = decode_entities($second->text);//раскодируем все html сущности
$node->uid = 1; // UID автора ноды; или используйте $node->name
$node->body['und'][0]['format'] = 'full_html'; // формат
$node->body['und'][0]['value'] = $text;//друпаловские поля боди
$node->body['und'][0]['summary'] = $text;
$node->field_job['und'][0]['value'] = $second->department; // созданные мною нужные поля, делайте по аналогии
$node->field_job['und'][0]['save_value'] = $second->department;
$node->field_email['und'][0]['value'] = $first->email;
$node->field_email['und'][0]['save_value'] = $first->email;

$path = $_SERVER['DOCUMENT_ROOT']."/2/$image";//фото лежат на моем сервере
$filename = $image;

$file_temp = file_get_contents($path);//получаем файл
$file_temp = file_save_data($file_temp, 'public://' . $filename, FILE_EXISTS_RENAME);//переносим и получаем обьект фотки
$node->field_team = array(//сохраняем полю которое требует картинку, у меня это field_team
'und' => array(
0 => array(
'fid' => $file_temp->fid,
'filename' => $file_temp->filename,
'filemime' => $file_temp->filemime,
'uid' => 1,
'uri' => $file_temp->uri,
'status' => 1
)
)
);

if ($cnc!='') {//если url установлен
$path = ''.$cnc.'.html';//мне нужно было добавить html
$node->path = array('alias' => $path); // устанавливаем ноде url
}

if($node = node_submit($node)) { // готовим ноду к сохранению
node_save($node);//сохранем

echo "Node with nid " . $node->nid . " saved!
\n";
}

}

Вот и все, этот код писал давно, потому криво, не судите строго, это не готовое решение, а скорее подсказка вам, что бы вы использовали какие то его части по своей необходимости.

Оставить комментарий