Antwort #3 am: 16. Dezember 2015, 09:45:53
Wenn die Bilder richtig benannt sind, also mit <products_id>_0.jpg, und das auch so in der CSV steht, kann man die Bilder einfach in den images/product_images/original_images Ordner legen, das CSV importieren und das Imageprocessing laufen lassen.
Zum umbenennen von hunderten Bildern in einem Rutsch empfehle ich Irfanview.
Wenn Du Scripte brauchst, die das importieren erledigen:
import_products.php
<?php// security -- only allow IP adress of our office// include('ipcheck.php'); // DANGER! You need your security solution here!// filename of input file$filename = 'import.csv';// tell modified shop code, we have a secure accessdefine ("_VALID_XTC","OK");// tell import class our delimeter and textsigndefine ('CSV_SEPERATOR',"\t"); // I use tab here (make sure your import.csv doesn't contain any tab inside a cell!!!)define ('CSV_TEXTSIGN','^'); // I use # here (make sure your import.csv doesn't contain any # inside a cell!!!)// includerequire('includes/application_top.php');require('admin/includes/classes/import.php');require('inc/xtc_format_filesize.inc.php');require('inc/xtc_get_customers_statuses.inc.php');// import data$handler = new xtcImport
($filename);$mapping=$handler->map_file($handler->generate_map());$import=$handler->import($mapping);// output success and/or failureif ($import){ if ($import[0]) { echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="messageStackSuccess">'; if (isset($import[0]['prod_new'])) echo 'Neue Artikel:'.$import[0]['prod_new'].'<br />'; if (isset($import[0]['cat_new'])) echo 'Neue Kategorien:'.$import[0]['cat_new'].'<br />'; if (isset($import[0]['prod_upd'])) echo 'Aktualisierte Artikel:'.$import[0]['prod_upd'].'<br />'; if (isset($import[0]['cat_upd'])) echo 'Aktualisierte Kategorien:'.$import[0]['cat_upd'].'<br />'; if (isset($import[0]['cat_touched'])) echo 'Betroffene Kategorien:'.$import[0]['cat_touched'].'<br />'; if (isset($import[2])) echo $import[2]; echo ' </td>
</tr>
</table>'; } if (isset($import[1]) && $import[1][0]!='') { echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="messageStackError">'; for ($i=0;$i<count($import[1]);$i++) { echo $import[1][$i].'<br />'; } echo ' </td>
</tr>
</table>'; }}?> Das script nutzt die imageprocessing routine des shops:
<?php// security -- only allow IP adress of our office// include('ipcheck.php'); // DANGER! You need your own security solution here!// tell modified shop code, we have a secure accessdefine ("_VALID_XTC","OK");require_once('includes/application_top.php');// copy from admin configure.phpif (!defined('HTTP_SERVER')) define('HTTP_SERVER', 'https://kollateral-verlag.net'); // eg, http://localhost or - https://localhost should not be empty for productive serversif (!defined('HTTP_CATALOG_SERVER')) define('HTTP_CATALOG_SERVER', 'https://www.kollateral-verlag.net');if (!defined('HTTPS_CATALOG_SERVER')) define('HTTPS_CATALOG_SERVER', 'https://www.kollateral-verlag.net');if (!defined('ENABLE_SSL_CATALOG')) define('ENABLE_SSL_CATALOG', 'true'); // secure webserver for catalog moduleif (!defined('USE_SSL_PROXY')) define('USE_SSL_PROXY', false); // using SSL proxy?if (!defined('DIR_FS_DOCUMENT_ROOT')) define('DIR_FS_DOCUMENT_ROOT', '/var/www/vhosts/kollateral-verlag.net/httpdocs/'); // where the pages are located on the serverif (!defined('DIR_WS_ADMIN')) define('DIR_WS_ADMIN', '/admin/'); // absolute path requiredif (!defined('DIR_FS_ADMIN')) define('DIR_FS_ADMIN', '/var/www/vhosts/kollateral-verlag.net/httpdocs/admin/'); // absolute pate requiredif (!defined('DIR_WS_CATALOG')) define('DIR_WS_CATALOG', '/'); // absolute path requiredif (!defined('DIR_FS_CATALOG')) define('DIR_FS_CATALOG', '/var/www/vhosts/kollateral-verlag.net/httpdocs/'); // absolute path requiredif (!defined('DIR_WS_IMAGES')) define('DIR_WS_IMAGES', 'images/');if (!defined('DIR_FS_CATALOG_IMAGES')) define('DIR_FS_CATALOG_IMAGES', DIR_FS_CATALOG
. 'images/');if (!defined('DIR_FS_CATALOG_ORIGINAL_IMAGES')) define('DIR_FS_CATALOG_ORIGINAL_IMAGES', DIR_FS_CATALOG_IMAGES
.'product_images/original_images/');if (!defined('DIR_FS_CATALOG_THUMBNAIL_IMAGES')) define('DIR_FS_CATALOG_THUMBNAIL_IMAGES', DIR_FS_CATALOG_IMAGES
.'product_images/thumbnail_images/');if (!defined('DIR_FS_CATALOG_INFO_IMAGES')) define('DIR_FS_CATALOG_INFO_IMAGES', DIR_FS_CATALOG_IMAGES
.'product_images/info_images/');if (!defined('DIR_FS_CATALOG_POPUP_IMAGES')) define('DIR_FS_CATALOG_POPUP_IMAGES', DIR_FS_CATALOG_IMAGES
.'product_images/popup_images/');if (!defined('DIR_WS_ICONS')) define('DIR_WS_ICONS', DIR_WS_IMAGES
. 'icons/');if (!defined('DIR_WS_CATALOG_IMAGES')) define('DIR_WS_CATALOG_IMAGES', DIR_WS_CATALOG
. 'images/');if (!defined('DIR_WS_CATALOG_ORIGINAL_IMAGES')) define('DIR_WS_CATALOG_ORIGINAL_IMAGES', DIR_WS_CATALOG_IMAGES
.'product_images/original_images/');if (!defined('DIR_WS_CATALOG_THUMBNAIL_IMAGES')) define('DIR_WS_CATALOG_THUMBNAIL_IMAGES', DIR_WS_CATALOG_IMAGES
.'product_images/thumbnail_images/');if (!defined('DIR_WS_CATALOG_INFO_IMAGES')) define('DIR_WS_CATALOG_INFO_IMAGES', DIR_WS_CATALOG_IMAGES
.'product_images/info_images/');if (!defined('DIR_WS_CATALOG_POPUP_IMAGES')) define('DIR_WS_CATALOG_POPUP_IMAGES', DIR_WS_CATALOG_IMAGES
.'product_images/popup_images/');require('admin/includes/classes/image_manipulator_GD2_advanced.php');// copied function from general.phpfunction clear_string
($value) { $string = str_replace("'", '', $value); $string = str_replace(')', '', $string); $string = str_replace('(', '', $string); $array = explode(',', $string); return $array;}// initialise arrays$original_images = array();$processed_images = array();// original images$d = dir(DIR_FS_CATALOG_ORIGINAL_IMAGES
);while (false !== ($entry = $d->read())) { if ($entry != "noimage.gif") $original_images[]=$entry;}$d->close();// product info images$d = dir(DIR_FS_CATALOG_INFO_IMAGES
);while (false !== ($entry = $d->read())) { if ($entry != "noimage.gif") $processed_images[]=$entry;}$d->close();// compare arrays$products_image_name = array_diff($original_images, $processed_images);// if no difference, quit with statement completeif (empty($products_image_name)) { die ("Imageprocessing abgeschlossen.");} else {// process one picture $products_image_name = array_shift($products_image_name); include('admin/includes/product_info_images.php'); include('admin/includes/product_popup_images.php'); include('admin/includes/product_thumbnail_images.php'); echo "Bild $products_image_name wurde verarbeitet";}?> Bei mir laufen die Scripte zum Importieren einzelner Artikel seit Monaten. Beide Scripte sind mit wenig Aufwand dahingehend umzuarbeiten, dass sie nur eine bestimmte Anzahl von Artikeln in einem Rutsch machen, um timeouts zu vermeiden. Drei Zeilen JQuery und zwei Schleifen im PHP sollten reichen.
Alternativ die script execution time setzen mit
set_time_limit(int $seconds)
und den Import auf einem Lokalen System machen, danach das ganze ins Web kopieren.