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: CSV-Import praxisnah umsetzen - Bilderimport und Artikel bearbeiten

    wiesenwaldi

    • Neu im Forum
    • Beiträge: 37
    Ich habe schon was ähnliches gefunden, aber da ich mehrere Fragen zum CSV-Import im Mod2.0 habe und der andere Thread sich von 2009 bis 2015 hinzieht starte ich hier mal neu.

    Aber jetzt gibt es doch noch kein thumbnail, popup und info image, oder?
    [...]

    Wir reden hier von EXTERN eingebundenen Produktbildern, die sich WEITERHIN auf einem externen Server befinden. Das ist nichts mit Größe ändern! Man kann diese Bilder aber in unterschiedlicher Größe anzeigen (z.B. CSS width). Das ist zwar nicht ideal, aber nicht anders lösbar.
    Wenn Du in der Produktbeschreibung weitere externe Bilder hast, sollten diese problemlos angezeigt werden (wenn der Pfad stimmt)

    Soweit ist das alles klar. Externe Bilder und so weiter. ;) Hab ich theoretisch keine.

    Ich klemme mich also mal mit dem "alternativen" Problem hier an. Ich habe die Originalbilder (meinetwegen extern, ist aber wurst) auf meiner Domain im Verzeichnis [shoproot]/images/product_images/original_images.

    Der Bildname ist die Artikelnummer (eigentlich die Lagernummer) des Artikels. Zum Beispiel 0815X_1.jpg bis 0815X_5.jpg
    In der Regel habe ich jeden Artikel genau einmal. Ist aber nicht wirklich das Problem, es führt nur zu einer Unzahl von Artikeln im Shop.
    Die Artikel sollen per CSV hochgeladen werden. Klappt grundsätzlich auch einwandfrei.

    In die Felder p_image.1   p_image.2   p_image.3   p_image.4   p_image.5   und p_image kann ich theoretisch eintragen, was ich lustig bin. Was ich da nicht eintragen kann ist die Artikel-ID des Shops, denn die kenne ich zu dem Zeitpunkt ja noch nicht. Ist aber, soweit ich das sehe auch nicht unbedingt nötig, der Shop verträgt auch andere Angaben, solange sie eindeutig sind.

    Nach dem Upload werden im Artikel 0815X auch die Bildnamen angezeigt, die ich mit hochgeladen habe. Funzt also auch.

    Nun wäre eine hübsche Option, das Imageprocessing manuell für frisch importierte Artikel gesammelt anzuschubsen. Stellt sich mir aber die Frage, ob das dann nicht aus 0815X_1.jpg die 10005_0.jpg macht, nur weil der Artikel die ID 10005 hat. Und das geht dann vermutlich bei der Anzeige wieder schief, weil der Dateiname ja nur einmal in der DB steckt und da lautet er anders. Der Dateiname muss dabei also beibehalten werden. Gefühlsmäßig würde ich da aber kein Problem sehen.

    Sonst bleibt mir nur die Variante mit dem Batchjob in IView und der manuelle Upload der verschiedenen Dateien. Das funzt zwar einwandfifi aber der Fehler sitzt dabei bekanntlich immer zwischen Tastatur und Bildschirm.

    Gibt es das schon oder hat mir jemand eine Idee, wo ich da im mod2.0 anfassen muss? So ein Knopf "fehlende Bilder prozessen" wäre prima.

    Zweites Thema: ich kann zwar aus der Übersicht heraus direkt die Artikelattribute setzen, aber wenn ich die Artikeleigenschaften angeben will muss ich jeden Artikel einzeln aufrufen, runterscrollen und bearbeiten. Gleich in der CSV mit hochladen geht ja anscheinend nicht.

    Richtig ideal wäre eine Bearbeitung "aller markierten Artikel" aus der Liste heraus. Die zusammengehörigen Merkmalgruppen kann ich dann ja selbst zusammenklicken. Oder wenigstens ein Button "E" neben dem Button "A" in der Liste. Meinetwegen darf auch der Button für die Merkmale rechts dazu missbraucht werden. Den brauch ich nicht unbedingt doppelt, also könnte man da auch einfach javascript:iframeBox_show(prod_id, Attribute editieren' , 'new_attributes.php','&action=edit'); durch javascript:iframeBox_show(prod_id, 'Artikeleigenschaften' , 'products_tags.php'); ersetzen, wenn mir jemand sagt wo ich das anfasse.

    Gibt es sowas schon oder wo bastel ich da am besten rum um alles kaputt zu kriegen? ;)

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

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Nein die Bildnamen müssen nicht erhalten bleiben. Man kann ein Script schreiben, das den autoincrement Wert der products_id kennt ...

    Google mal "mysql get autoincrement"

    Das CSV einlesen, die IDs bei den Bildnamen einfüllen, gleichzeitig die Bilder in original_images richtig nennen,

    Code: PHP  [Auswählen]
    $new_image_name = $autoincrement_value . '_0.' . pathinfo($_original_image_name, PATHINFO_EXTENSION);
     

    und das CSV wieder schreiben, die internen importfunktionen nutzen um das Produkt anzulegen oder die INSERTs selbst schreiben.

    Dann das imageprozessing starten.

    z.B. läuft das bei mir so:
    (In Schleife mit file_get_contents() aufrufen, bis die Ausgabe "Imageprocessing abgeschlossen.") kommt.

    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');



    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";
    }

    ?>

    Der Code war ursprünglich für eine Lösung wo ich von einem Webserver bei uns im Büro Artikel im Shop per Script angelegt habe, mit Bild. (Deshalb die Textausgaben mit echo, von Ajax hatte ich damals noch keinen Plan) Mittlerweile ist das im Shop integriert. Irgendwo in den Tiefen des Forums findet sich das Script hier nochmal. Wenn ich mich richtig erinnere hatte ich da noch ein wenig mehr dazu gepostet.

    Gegen  :2cent: baue ich das gerne für Dich genau so wie Du es brauchst. Das Thema Attribute müsste ich allerdings komplett neu entwickeln. Ich nutze so gut wie keine. Das geht aber auch per script, dass man die gleich mit importiert. Man sollte die nur vorher schon angelegt haben, sonst wird das Script sehr komplex.

    Wie man ein Produkt und Attribute in die DB bekommt kann man sich in der /admin/includes/classes/categories.php abschauen.

    web0null

    • Experte
    • Beiträge: 1.998
    Zitat
    Nun wäre eine hübsche Option, das Imageprocessing manuell für frisch importierte Artikel gesammelt anzuschubsen.

    Es gibt doch die beim Imageprocessing die Auswahl [Nur fehlende Bilder erstellen]
    Reicht dir das nicht?

    wiesenwaldi

    • Neu im Forum
    • Beiträge: 37
    Nein die Bildnamen müssen nicht erhalten bleiben. Man kann ein Script schreiben, das den autoincrement Wert der products_id kennt ...

    (...)

    Gegen  2cent baue ich das gerne für Dich genau so wie Du es brauchst. Das Thema Attribute müsste ich allerdings komplett neu entwickeln. Ich nutze so gut wie keine. Das geht aber auch per script, dass man die gleich mit importiert. Man sollte die nur vorher schon angelegt haben, sonst wird das Script sehr komplex.


    Die Bilder können meinetwegen Klaus-Bärbel heissen. Solange sie da sind und die Datenbank weiss, wie sie heissen. Wird mit Bordmitteln schon funktionieren.

    Bei den Eigenschaften/Merkmalen muss ich eigentlich nur wissen, wo ich anfassen muss. Datenbankanwendungen schreibe ich seit ungefähr 30 Jahren selber. Aber trotzdem danke für das unschlagbar günstige Smiley-Angebot. 2 Cent kann ich gerade noch aufbringen.  ;)

    Ich nehme mal an, dass diese Eigenschaften neu dabei sind und daher die direkte Bearbeitung aus der Übersicht raus noch nicht implementiert ist. Denn die lassen sich eben derzeit nur aus dem Artikel heraus bearbeiten.

    Wie man ein Produkt und Attribute in die DB bekommt kann man sich in der /admin/includes/classes/categories.php abschauen.

    Dann schau ich mir das mal an. Ich hab ja jetzt auch eingebaut, dass bei Artikelbestand von eins kein Eingabefeld für die Stückzahl mehr neben dem Warenkorb-Knopf im Produkt steht und ansonsten auch gleich noch der Bestand angezeigt wird. *schulterklopf*

    Aber ich lese mich ja gerade erst neu in den Shop ein.

    Zitat
    Nun wäre eine hübsche Option, das Imageprocessing manuell für frisch importierte Artikel gesammelt anzuschubsen.

    Es gibt doch die beim Imageprocessing die Auswahl [Nur fehlende Bilder erstellen]
    Reicht dir das nicht?

    Siehste, genau das brauch ich jetzt. Jemand, der mir sagt: das gibts schon, ich bin nur zu doof, es zu finden. *feix*

    Hab es jetzt anhand deiner Angabe gefunden und installiert. Mal sehen, was das genau macht. Vermutlich reicht mir das für die Bilder bzw ist sogar exakt das was ich gesucht habe: die On-Board-Lösung in Module => Systemmodule.

    Zitat
    Hierzu verarbeitet das Script nur eine begrenzte Anzahl von 5 Bildern und ruft sich danach selbst wieder auf.

    Sehe ich das richtig, dass sich das Modul rekursiv selbst befruchtet?

    wiesenwaldi

    • Neu im Forum
    • Beiträge: 37
    So, der Button für die Merkmale ist auch gelöst. Dabei habe ich bemerkt, dass das wohl schon angedacht ist.

    Das Ziel war das hier:

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    In admin/includes/moduels/categories_view.php

    nach

    Code: PHP  [Auswählen]
      if (is_file('includes/modules/products_attributes_iframe.php')) {
        include_once("includes/modules/products_attributes_iframe.php");
      }
     
    einsetzen

    Code: PHP  [Auswählen]
      if (is_file('includes/modules/products_tags_iframe.php')) {
        include_once("includes/modules/products_tags_iframe.php");
      }
     

    Dann den Block

    Code: PHP  [Auswählen]
    <td class="categories_view_data txta-l" style="padding-left: 8px;">
     <?php
     echo '<a href="'. xtc_href_link(FILENAME_CATEGORIES, xtc_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&pID=' . $products['products_id'] ) . '&action=new_product' . '">' . xtc_image(DIR_WS_ICONS . 'icon_edit.gif', ICON_EDIT, '', '', $icon_padding). '</a>';
     if (function_exists('attributes_iframe_link')) {
       echo attributes_iframe_link($products['products_id'], true);
     } else {
       echo '<a href="'. xtc_href_link(FILENAME_NEW_ATTRIBUTES, xtc_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cpath=' . $cPath . '&current_product_id=' . $products['products_id'] ) . '&action=edit' . '">' . xtc_image(DIR_WS_ICONS . 'icon_edit_attr.gif', BUTTON_EDIT_ATTRIBUTES,'', '', $icon_padding). '</a>';
     }
     echo '<a href="'.xtc_href_link(FILENAME_CATEGORIES, xtc_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&pID=' . $products['products_id']) .'">' . $products['products_name'] . '</a>';
     ?>
    </td>

    ergänzen bzw ersetzen durch

    Code: PHP  [Auswählen]
    <td class="categories_view_data txta-l" style="padding-left: 8px;">
     <?php
     echo '<a href="'. xtc_href_link(FILENAME_CATEGORIES, xtc_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&pID=' . $products['products_id'] ) . '&action=new_product' . '">' . xtc_image(DIR_WS_ICONS . 'icon_edit.gif', ICON_EDIT, '', '', $icon_padding). '</a>';
     if (function_exists('attributes_iframe_link')) {
       echo attributes_iframe_link($products['products_id'], true);
     } else {
       echo '<a href="'. xtc_href_link(FILENAME_NEW_ATTRIBUTES, xtc_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cpath=' . $cPath . '&current_product_id=' . $products['products_id'] ) . '&action=edit' . '">' . xtc_image(DIR_WS_ICONS . 'icon_edit_attr.gif', BUTTON_EDIT_ATTRIBUTES,'', '', $icon_padding). '</a>';
     }
     if (function_exists('tags_iframe_link')) {
       echo tags_iframe_link($products['products_id'], true);
     } else {
       echo '<a href="'. xtc_href_link(FILENAME_PRODUCTS_TAGS, xtc_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cpath=' . $cPath . '&current_product_id=' . $products['products_id'] ) . '&action=edit' . '">' . xtc_image(DIR_WS_ICONS . 'icon_edit_prop.gif', TEXT_PRODUCTS_TAGS ,'', '', $icon_padding). '</a><br />';
     }
     echo '<br /><a href="'.xtc_href_link(FILENAME_CATEGORIES, xtc_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&pID=' . $products['products_id']) .'">' . $products['products_name'] . '</a>';
     ?>
    </td>

    und der Link ist erst mal drin. Das <br /> vor der letzten Zeile ist reine Optik, mich hat gestört, dass die Artikelbezeichnung mit einem kurzen ersten Wort gleich hinter dem Button anfängt.

    Fehlen noch die Dateien icon_edit_prop.gif (die hatte ich mir gebaut) und icon_edit_tags.gif (die ist schon im Script vorgesehen, fehlt aber in der Installation) in admin/images/icons

    Kann man identisch machen, muss man aber nicht.

    Fertig ist der Button für die Merkmale. Zu meiner Überraschung funktioniert das sogar was ich da angestellt habe. ;)

    Darf gerne geklaut werden. Button liefere ich mal mit: [ Für Gäste sind keine Dateianhänge sichtbar ]
    Shop Hosting