Marktplatz - Eine große Auswahl an neuen und hilfreichen Modulen sowie modernen Templates für die modified eCommerce Shopsoftware
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: Nach CSV-Import wird Name des Herstellers in Artikeldetails NICHT angezeigt

    klaus99

    • Fördermitglied
    • Beiträge: 43
    Hallo zusammen, ich komme beim Aufbau des Shops nun nicht mehr weiter und bitte um Hilfe.

    Ich importiere Artikel per CSV-Datei in die derzeit aktuelle modified-Version:
    modified eCommerce Shopssoftware v2.0.4.2 rev 11374 dated: 2018-07-23, Datenbank Version: "MOD_2.0.4.2"

    Ergebnis des Imports in der DB:
    1. Die Artikel werden angelegt und die Datenfelder gefüllt
    2. die Hersteller werden angelegt in der Tabelle manufacturers und die Felder manufacturers_id und manufacturers_name werden gefüllt
    3. die weitern Felder in der Tabelle manufacturers stehen auf NULL
    4. die Tabelle manufacturers_info ist leer.

    Ergebnis des Imports im Frontend in der Artikel-Details-Ansicht:
    1. Das Feld Verlag und sein Inhalt werden NICHT angezeigt
    2. Das Feld Mehr Artikel von und der Link werden NICHT angezeigt
    3. Laut product_info_tabs_v1.html sollten die beiden Felder aber angezeigt werden, da die Hersteller ja vorher importiert wurden.

    Interessanter Effekt:
    Wenn ich im Backend über Katalog/Hersteller einen Hersteller aufrufe, nichts verändere und nur Speichere drücke, dann werden die beiden o.a. Felder in der  Artikel-Details-Ansicht plötzlich angezeigt.
    Dann steht nämlich in der Tabelle manufacturers im Feld last-modified nicht mehr NULL sondern ein Datum.
    Und in der manufacturers_info sind zwei Zeilen (für zwei Sprachen) für diesen Hersteller angelegt. Die Felder manufacturers_id und languages_id sind gefüllt, die anderen Felder sind leer.

    Der angedachte Workaround „in der Tabelle manufacturers das Feld last_modified per SQL füllen“ funktioniert leider nicht.

    So bleibt die Frage: Was tun?


    Linkback: https://www.modified-shop.org/forum/index.php?topic=40178.0
    Trade Republic - Provisionsfrei Aktien handeln

    awids

    • Experte
    • Beiträge: 3.782
    • Geschlecht:
    Erstmal vielen lieben Dank für die großartige Beschreibung, welche neben der Shopversion auch alle vorgenommenen Schritte und bisher eigenen Lösungsversuche enthält. Das ist hier mittlerweile so selten wie ein Lottogewinn und gehört entsprechend honoriert.  :thx:

    Ich finde den Beitrag leider nicht auf die Schnelle wieder, aber bereits vor Ewigkeiten hatte ich mal einem User empfohlen, alle Hersteller kurz zu öffnen und erneut abzuspeichern, da er dasselbe Problem hatte und ich kurz zuvor dieselbe Beobachtung gemacht und dies so gelöst habe. Ich gehe also davon aus, dass hier beim Import selbst der Fehler liegt, weil die Zeilen in der manufacturers_info nicht angelegt werden.

    Ich habe im Bugtracker das Ticket #1618 hierzu angelegt.

    LG Alex

    klaus99

    • Fördermitglied
    • Beiträge: 43
    Gut, dann sind wir uns also einig, daß hier ein Programmfehler vorliegt (war mir nicht sicher, ob ich alles bedacht habe).

    Der Workaround "alle Hersteller mal kurz öffnen und wieder abspeichern" funktioniert beim manuellen Aufbau eines Shops, in meinem Fall leider nicht: Ein paar hundert Hersteller will ich nicht öffnen ...

    Bis wann könnte man mit der Erledigung des Tickets rechnen? (Es sollten ja nur ein paar Statements sein, hüstel, hüstel).

    awids

    • Experte
    • Beiträge: 3.782
    • Geschlecht:
    Das Team wird sich der Sache sicher gerne annehmen, aber du musst damit rechnen, dass die Prioritäten anders gesetzt werden, als du es dir aktuell vielleicht gerade wünschst. Wenn es wirklich schnell gehen muss, solltest du das Import-Script entsprechend anpassen (oder einen Programmierer damit beauftragen). Wenn bereits alle Hersteller drin sind, könnte man auch ein Script schreiben, welches einmalig über die Browserzeile aufgerufen wird und die Einträge auf grundlage der Tabelle manufacturers in manufacturers_info erstellt.

    karsta.de

    • Experte
    • Beiträge: 3.056
    Um das Feld last-modified für alle Hersteller zu füllen könntest du die Datenbankbefehl ausführen. (z.B. über phpmyadmin)

    Code: SQL  [Auswählen]
    UPDATE manufacturers SET last_modified = '2019-04-10 18:09:22';

    BG kgd

    klaus99

    • Fördermitglied
    • Beiträge: 43
    @awids
    Danke für Deine Antwort. Ich arbeite dann weiter am Shop-Aufbau (hab' ja noch weitere Aktivitäten neben der Datenübernahme) und warte ab, ob das Ticket bis dahin gelöst ist. Wenn nicht, komme ich auf das Angebot für das Einmal-Skript zurück.

    @kgd
    Danke auch für Deinen Vorschlag. Hatte ich schon probiert, hilft aber nicht, da die Tabelle manufacturers_info aufgebaut werden muß. Diese Programmierung traue ich mir nicht zu.

    Hetfield

    • modified Team
    • Beiträge: 937
    Hallo Klaus!

    Im Anhang ein ungetester Bugfix. Die unveränderte Datei admin/includes/classes/import.php gegen die aus dem ZIP-Paket ersetzen.

    Die Datei manufacturer_lang.php im Hauptverzeichnis einmal per Browser ausführen und wieder löschen.

    Wie bereits erwähnt: UNGETESTET! Dehalb unbedingt vorher eine Sicherung machen!

    MfG Hetfield  8-)

    klaus99

    • Fördermitglied
    • Beiträge: 43
    @Hetfield

    Super, Danke, probiere ich morgen Früh gleich aus!

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    @Hetfield
    Vorab: Vielen Dank für den Fix.
    Ich hatte die Import-Klasse für die 2.0.X mal für web28 (R.I.P.) überarbeitet und fühle mich deshalb ein wenig verantwortlich :hust:.
    Ist mir leider nicht aufgefallen damals, daß die Einträge für die Tabelle manufacturers_info fehlen (scheint schon sehr lange auch in den Vorgänger-Versionen so zu sein).

    Zu deinem Skript zum nachträglichen Fix:
    Code: PHP  [Auswählen]
    $languages = get_the_languages_id();
    in die while-Schleife zu schreiben ist etwas unglücklich... ;-)

    Gruß,
    noRiddle

    klaus99

    • Fördermitglied
    • Beiträge: 43
    Bin gerade am Testen.
    Der erste Test, der nachträgliche Aufbau der manufacturers_info mit dem Programm manufacturer_lang.php, hat vollständig und perfekt geklappt.

    Hetfield

    • modified Team
    • Beiträge: 937
    [...]
    Zu deinem Skript zum nachträglichen Fix:
    Code: PHP  [Auswählen]
    $languages = get_the_languages_id();
    in die while-Schleife zu schreiben ist etwas unglücklich... ;-)
    [...]

    Stimmt! Asche auf mein Haupt, war aber auch nur fix dahin gezimmert und funktioniert ja trotzdem.  :lol1:

    Einfach die Zeile 1-2 zeilen weiter hochschieben im Quellcode, wer mag.

    MfG Hetfield  8-)

    klaus99

    • Fördermitglied
    • Beiträge: 43
    Test des Imports mit dem angepaßten Programm import.php:
    Das Programm legt in der manufacturers_info nur Sätze für die Sprache mit der languages_id = 1 an.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Mach' mal in der Funktion
    Code: PHP  [Auswählen]
    function getMAN($manufacturer) {

    aus dem
    Code: PHP  [Auswählen]
    'languages_id' => $this->languages[$n]['id']

    das
    Code: PHP  [Auswählen]
    'languages_id' => $this->languages[$i]['id']
    (also $i anstatt $n)

    Gruß,
    noRiddle

    *NACHTRAG*
    Da ist noch mehr verkehrt, kleinen Moment.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Hier die komplette Korrektur:
    Code: PHP  [Auswählen]
                //for ($i = 0, $n = sizeof($this->sizeof_languages); $i < $n; $i++) {
                for ($i = 0; $i < $this->sizeof_languages; $i ++) {  //corrected, noRiddle
                  $insert_sql_data = array(
                    'manufacturers_id' => $this->mfn[$manufacturer]['id'],
                    //'languages_id' => $this->languages[$n]['id']
                    'languages_id' => $this->languages[$i]['id'] //corrected, noRiddle
                  );
                  xtc_db_perform(TABLE_MANUFACTURERS_INFO, $insert_sql_data);
                }

    sizeof($this->sizeof_languages) ist ja Bldösinn weil $this->sizeof_languages bereits sizeof($this->languages) ist (wenn das keine Aliteration ist :-D).

    Gruß,
    noRiddle

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.213
    • Geschlecht:
    im SVN r11743 übernommen.

    Danke !

    Gruss Gerhard

    P.S. ich habe auch 3 auto_include reingemacht
    10 Antworten
    7611 Aufrufe
    12. Juli 2011, 21:33:20 von Tomcraft
    1 Antworten
    2788 Aufrufe
    19. November 2010, 14:15:16 von Tomcraft
    8 Antworten
    4392 Aufrufe
    12. Mai 2011, 10:49:29 von Tomcraft
               
    anything