Képek importálása

sajt képe

Elég sokáig keresgéltem a megfelelő megoldást képek importálására. Egy olyan projecten dolgozom, ahol egy régi adatbázisból kell híreket importálni.

Az adatbázis tábla következőképpen néz ki:

CREATE TABLE `hirek` (
`id` int(10) unsigned NOT NULL auto_increment,
`nev` blob,
`lead` blob,
`hir` blob,
`datum` datetime default NULL,
`aktiv` int(11) default '1',
`kiskep` mediumblob,
`kep` mediumblob,
`link` varchar(255) default NULL,
PRIMARY KEY (`id`)
);

Ebben a táblában a "kep" mező a képet tartalmazza binárisan. A működéshez telepíteni kellett a cck, filefield, imagefield modulokat és el kellett készíteni egy új tartalom típust hir néven. Ebbe a tartalomtípusba pedig létrehozni egy kép típusú mezőt field_image néven. Természetesen ezek változhatnak.

És akkor a kód:

db_set_active('etno');
$result = db_query('SELECT * FROM hirek');
db_set_active();
while ($row = db_fetch_object($result)){
_sajt_iconv($row->nev);
_sajt_iconv($row->lead);
_sajt_iconv($row->hir);
$node = new stdClass();
$node->type = 'hir';
$node->status = 1;
$node->title = $row->nev;
$node->body = $row->hir;
$node->teaser = $row->lead;
$node->status = 1;
$node->uid = 1;
$node->created = $node->changed = strtotime($row->datum);
$node->comment = 0;
$node->promote = 1;
$node->sicky = 0;
//pic
//$file_temp = $row->kep;
file_put_contents('/tmp/hirek_'.$row->id.'.jpg', $row->kep);
$fid = field_file_save_file('/tmp/hirek_'.$row->id.'.jpg', array(), file_directory_path() .'/images/hirek/', FILE_EXISTS_REPLACE);
$node->field_image = array($fid);
node_save($node);
}
}

function _sajt_iconv(&$text){
$text = iconv('iso-8859-2', 'utf-8', $text);
$text = html_entity_decode($text, ENT_COMPAT, 'UTF-8');
return $text;
}

Ebből a lényeg a field_file_save_file(). Természetesen több képet is hozzá lehet fűzni a hírhez. Ekkor a $node->field_image tömbbe több elemet kell tenni.