Drupal 7 – jak na import obrázků
Nedávno jsem řešil migraci starých stránek na Drupal 7 a potřeboval importovat obrázky. Dosud jsem na to neviděl jednotný skript, tak jsem si ho napsal sám.
Jako zdroj pro import mi posloužila vlastní MySQL tabulka import, která obsahuje všechny potřebné hodnoty (které jsem si předtím dogeneroval do drupal-friendly formy). Jednoduchou iterací pak postupně zapisuji data do Drupalu. Dávejte pozor, pokud importujete větší množství souborů na 30sec PHP limit (doporučuji ho pro toto použití dočasně navýšit a provádět operaci na lokálním počítači). Skript počítá s tím, že importované obrázky jsou umístěny ve složce sites/default/files/import/. Důležité je, že pracovat se souborem můžete pouze jako objekt – pouhá cesta k souboru nestačí.
Níže uvedený skript tedy přidává obrázky k již existujícím uzlům či komentářům. Z pro mě nepochopitelných důvodů totiž existuje vedle sebe komentář a uzel, k jeho zrušení by mělo dojít až v Drupal 8.
Jinak doporučuji, jak jsem psal výše, si samotný import rozfázovat na více částí, kvůli snadnějšímu ladění chyb. Samozřejmě pokud se chystáte import dělat pravidelně, je na místě vyladit komplexní skript, který vše provede v jednom kroce.
$result = db_query('SELECT * FROM {import}');
foreach ($result as $record) {
$filepath = 'sites/default/files/import/' . $record->id . '.jpg';
//if we have image
if(file_exists($filepath)) {
drupal_set_message('Soubor existuje.');
$file = new StdClass();
$file->uid = $record->uid;
$file->uri = $filepath;
$file->filemime = file_get_mimetype($file->uri);
$file->status = FILE_STATUS_PERMANENT;
if($file2 = file_copy($file,'public://field_image', FILE_EXISTS_REPLACE)) {
if($record->comment == 1) {
//thread
$node = node_load($record->nid);
$node->field_image[LANGUAGE_NONE][0] = (array)$file2;
node_save($node);
drupal_set_message('Obrazek pripojen k node ' . $record->nid);
}else{
//comment
$comment = comment_load($record->cid);
$comment->field_image[LANGUAGE_NONE][0] = (array)$file2;
comment_save($comment);
drupal_set_message('Obrazek pripojen k comment ' . $record->cid);
}
}
}
}
Skript lze jednoduše modifikovat tak, aby uzly či komentáře i vytvářel, ale to už si nechám zase na někdy příště. Stejně tak skript nepočítá s přiložením více obrázků, protože jsem tuto vlastnost nepotřeboval.
Pokud víte, že to lze napsat lépe, budu rád, když se podělíte v komentářích.
Přidej vlastní názor
Ty