Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Imageprozessing und CSV-Import von extern starten / Automatischer CSV-Import

    mahagma

    • Fördermitglied
    • Beiträge: 211
    Hallo,

    ich würde gerne aus meiner Warenwirtschaft alle 3 Stunden eine CSV-Datei generieren, die dann automatisch in modified eCommerce Shopsoftware geladen wird. Kann ich den Import automatischen CSV-Import den am besten verwirklichen?

    Nach dem Import soll automatisch das Imageprozessing starten und alle neuen Bilder generieren.

    Linkback: https://www.modified-shop.org/forum/index.php?topic=16870.0

    hendrik

    • Experte
    • Beiträge: 2.038
    [...] Kann ich den Import automatischen CSV-Import den am besten verwirklichen?
    [...]

    Für 'ne Zeitsteuerung gibt's grundsätzlich 2 Wege. Durch externen Aufruf oder serverintern durch Cronjob. Aber in beiden Fällen kannst du den CSV-Import aus der Administration nicht ohne Änderungen aufrufen da die Session geprüft wird. Ohne gültigen Login läuft im Backend gar nichts. Man muß die CSV-Importroutine von der Prüfung eines gültigen Logins (Sessionprüfung) befreien und anderweitig gegen Mißbrauch sichern.

    Die Importroutinen findest du in der xtcImport-Klasse ("/admin/includes/classes/import.php"). Daraus kann man ein unabhängiges Importscript erstellen.

    Gruß
    Hen

    mahagma

    • Fördermitglied
    • Beiträge: 211
    Danke

    mahagma

    • Fördermitglied
    • Beiträge: 211
    Ich bin leider erst jetzt dazu gekommen mir das mal an zu schauen. Leider zwecklos bei meinen PHP-Kenntnissen.

    Kann mir dafür jemand ein Angebot machen?

    Also Bilder und CSV-Datei werden automatisch auf dem Server abgelegt, es geht also nur darum den Import und Image-Prozessing Prozess anzustoßen.

    Freue mich auf Antworten

    Marcel86

    • Neu im Forum
    • Beiträge: 28
    Gibts denn jetzt jemand der sowas anbietet? Oder ein Modul odersowas?

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Mit fester IP geht das:
    /ipcheck.php
    Code: PHP  [Auswählen]
    <?php

    // security -- only allow IP adress of our office
    if (getenv('REMOTE_ADDR') != "x.x.x.x" ) die ("Access denied!");

    ?>

    /imageprocessing.php (Deine Werte eintragen!)
    Code: PHP  [Auswählen]
    <?php
    // security -- only allow IP adress of our office
    include('ipcheck.php');
    // tell modified shop code, we have a secure access
    define ("_VALID_XTC","OK");
    require_once('includes/application_top.php');

    // copy from admin configure.php
    if (!defined('HTTP_SERVER')) define('HTTP_SERVER', 'http://localhost'); // eg, http://localhost or - https://localhost should not be empty for productive servers
    if (!defined('HTTP_CATALOG_SERVER')) define('HTTP_CATALOG_SERVER', 'http://localhost');
    if (!defined('HTTPS_CATALOG_SERVER')) define('HTTPS_CATALOG_SERVER', 'http://localhost');
    if (!defined('ENABLE_SSL_CATALOG')) define('ENABLE_SSL_CATALOG', 'true'); // secure webserver for catalog module
    if (!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/'); // where the pages are located on the server
    if (!defined('DIR_WS_ADMIN')) define('DIR_WS_ADMIN', '/admin/'); // absolute path required
    if (!defined('DIR_FS_ADMIN')) define('DIR_FS_ADMIN', '/var/www/'); // absolute pate required
    if (!defined('DIR_WS_CATALOG')) define('DIR_WS_CATALOG', '/'); // absolute path required
    if (!defined('DIR_FS_CATALOG')) define('DIR_FS_CATALOG', '/var/www/'); // absolute path required
    if (!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.php
    function 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 complete
    if (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";
    }

    ?>

    /upload_products.php
    Code: PHP  [Auswählen]
    <?php

    // security -- only allow IP adress of our office
    include('ipcheck.php');


    // filename of input file
    $filename = 'import.csv';

    // tell modified shop code, we have a secure access
    define ("_VALID_XTC","OK");
    // tell import class our delimeter and textsign
    define ('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!!!)

    // include
    require('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 failure
    if ($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>'
    ;
     }

    }

    ?>

    Jetzt musst du nur noch per script (z.B. auf einem XAMMP in Deinem Büro) das import.csv generieren, per ftps oder sftp in den Ordner /import auf dem Shopserver kopieren, die Bilder kopieren, und per cronjob die beiden unteren php Dateien in der richtigen Reihenfolge starten. Wenn Du das auf einem lokalen xammp machst, nimm einen Browser der auf dem Rechner NICHT von Benutzern ausgeführt wird, und hänge z.B. eine Stunde später noch einen "taskkill /f /im opera.exe" hinten dran. Sonst läuft dir der Speicher irgendwann voll, weil der Browser schon den 163225sten Tab offen hat.

    Diese 3 scripts oben sind bei mir seit über einem Jahr produktiv in Betrieb. Alerdings zum halbautomatischen Import von Artikeln.
    2 Antworten
    3182 Aufrufe
    11. Mai 2012, 21:43:05 von mahagma
    0 Antworten
    2330 Aufrufe
    30. Dezember 2012, 18:01:38 von mwdragon
    3 Antworten
    2827 Aufrufe
    02. August 2010, 17:06:49 von Tomcraft
    4 Antworten
    3047 Aufrufe
    05. April 2016, 09:30:30 von Kawabiker