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.



Komentáře

Zatím nikdo nepřidal komentář, můžete být první.



O autorovi

Pari

Vítejte na mém blogu, rád bych se v krátkosti představil. Je mi 26 let. Momentálně nejvíce času věnuji projektu Lepime.cz - obchod se samolepkami na zeď a tvorbě webů postavených na redakčním systému Drupal pod značkou MEPA.CZ.