Das Symptom
Bei mir werden immer wieder sporadisch Vorschaubilder in der Listenansicht und auch im Artikel selbst von Variationskombinations-Kindern nicht angezeigt. Sie erscheinen nicht als Vorschaubilder. Das Ganze folgte keinem erkennbaren Schema.
Der Bug
In der Datei \classes\class.JTL- Shop.Artikel.php in der Funktion function holeVariationKombiKinder($kKundengruppe, $kSprache) werden die unter anderem die Vorschaubilder der Kinderartikel geholt. Dies geschieht in folgender Schleife
1. Jemand hatte die Idee, nur Bilder von Kinderartikeln sichtbar zu machen, sofern diese Bilder nur EINMAL auftauchen. D.h. jeder Kinderartikel, der das gleiche Bild1 gesetzt hat wie ein bereits vorher durchlaufener Artikel, wird nicht angezeigt. Ich halte die Idee für ausgesprochen schlecht. Wieso soll ein gleiches Bild nicht angezeigt werden? Man nimmt dem Kunden so die Möglichkeit, den Kinderartikel per Klick auszuwählen. Ein doppelt angezeigtes Bild signalisiert auch dem Shopbetreiber, daß er hier vielleicht mal handeln sollte, während ein nicht angezeigtes Bild dieses Problem unter den Tisch kehrt.
2. Aktuell werden die Mini Bilder verglichen und zwar auf Basis der Dateigröße. Wurde eine Dateigröße schon einmal bearbeitet, werden weitere Bilder mit gleicher Größe ignoriert. Nun sind die Mini-Bider ab sehr, sehr klein. Nur 1-2kB. Die Wahrscheinlichkeit, zwei unterschiedliche Bilder zu haben, die aber gleich groß sind, ist gar nicht mal so gering. Und tatsächlich ist genau HIER das Problem für nicht angezeigte Variationskombinations-Bilder bei mir. Bereits bei einem Artikel mit nur 12 Variationen habe ich Bilder identischer Größe aber mit unterschiedlichem Inhalt.
Workaround
1. Ich halte die Idee, doppelte Bilder auszublenden für schlecht und würde diese Funktion komplett rausnehmen.
2. Wenn die Funktion drin bleiben soll, MUSS der Vergleich der Dateigröße auf einem größeren Bild gemacht werden, da hier die Wahrscheinlichkeit, nicht identische Bilder anhand der Größe falsch als identisch zu erkennen geringer ist. Es sollte mindestens PFAD_PRODUKTBILDER_NORMAL als Basis genommen werden.
Die Sektion muß somit lauten:
Dieser Bug dürfte bei eltlichen Usern für sporadisches Fehlen von Vorschaubildern verantwortlich sein. Das Thema gabs hier im Forum ja schon öfters!
Bei mir werden immer wieder sporadisch Vorschaubilder in der Listenansicht und auch im Artikel selbst von Variationskombinations-Kindern nicht angezeigt. Sie erscheinen nicht als Vorschaubilder. Das Ganze folgte keinem erkennbaren Schema.
Der Bug
In der Datei \classes\class.JTL- Shop.Artikel.php in der Funktion function holeVariationKombiKinder($kKundengruppe, $kSprache) werden die unter anderem die Vorschaubilder der Kinderartikel geholt. Dies geschieht in folgender Schleife
Code:
$cBildGroesse_arr = array(); // Nur Bilder die max. 1x vorhanden sind
$nKombiVorschauAnzahl = count($oVariationKombiVorschau_arr);
foreach($oVariationKombiVorschau_arr as $i => $oVariationKombiVorschau)
{
/*
unset($oArtikelTMP);
unset($oArtikelOptionenTMP);
$oArtikelTMP = new Artikel();
$oArtikelTMP->fuelleArtikel($oVariationKombiVorschau->kArtikel, $oArtikelOptionenTMP);
*/
// Kostet zuviel Performence, dadurch koennten aber doppelte Bilder eingefuegt werden
/*
if($nKombiVorschauAnzahl <= 50)
{
*/
if(in_array(@filesize(PFAD_ROOT . PFAD_PRODUKTBILDER_MINI . $oVariationKombiVorschau->cPfad), $cBildGroesse_arr))
{
unset($this->oVariationKombiVorschau_arr[$i]);
}
else
{
$this->oVariationKombiVorschau_arr[$i] = new stdClass();
$this->oVariationKombiVorschau_arr[$i]->cURL = URL_SHOP . "/navi.php?a=" . $this->kArtikel . "&a2=" . $oVariationKombiVorschau->kArtikel;
$this->oVariationKombiVorschau_arr[$i]->cName = $oVariationKombiVorschau->cName;
$this->oVariationKombiVorschau_arr[$i]->cBildMini = PFAD_PRODUKTBILDER_MINI . $oVariationKombiVorschau->cPfad;
$this->oVariationKombiVorschau_arr[$i]->cBildKlein = PFAD_PRODUKTBILDER_KLEIN . $oVariationKombiVorschau->cPfad;
$this->oVariationKombiVorschau_arr[$i]->cBildNormal = PFAD_PRODUKTBILDER_NORMAL . $oVariationKombiVorschau->cPfad;
$this->oVariationKombiVorschau_arr[$i]->cBildGross = PFAD_PRODUKTBILDER_GROSS . $oVariationKombiVorschau->cPfad;
$cBildGroesse_arr[] = @filesize(PFAD_ROOT . PFAD_PRODUKTBILDER_MINI . $oVariationKombiVorschau->cPfad);
}
if(count($this->oVariationKombiVorschau_arr) == $nLimit)
break;
}
}
}
1. Jemand hatte die Idee, nur Bilder von Kinderartikeln sichtbar zu machen, sofern diese Bilder nur EINMAL auftauchen. D.h. jeder Kinderartikel, der das gleiche Bild1 gesetzt hat wie ein bereits vorher durchlaufener Artikel, wird nicht angezeigt. Ich halte die Idee für ausgesprochen schlecht. Wieso soll ein gleiches Bild nicht angezeigt werden? Man nimmt dem Kunden so die Möglichkeit, den Kinderartikel per Klick auszuwählen. Ein doppelt angezeigtes Bild signalisiert auch dem Shopbetreiber, daß er hier vielleicht mal handeln sollte, während ein nicht angezeigtes Bild dieses Problem unter den Tisch kehrt.
2. Aktuell werden die Mini Bilder verglichen und zwar auf Basis der Dateigröße. Wurde eine Dateigröße schon einmal bearbeitet, werden weitere Bilder mit gleicher Größe ignoriert. Nun sind die Mini-Bider ab sehr, sehr klein. Nur 1-2kB. Die Wahrscheinlichkeit, zwei unterschiedliche Bilder zu haben, die aber gleich groß sind, ist gar nicht mal so gering. Und tatsächlich ist genau HIER das Problem für nicht angezeigte Variationskombinations-Bilder bei mir. Bereits bei einem Artikel mit nur 12 Variationen habe ich Bilder identischer Größe aber mit unterschiedlichem Inhalt.
Workaround
1. Ich halte die Idee, doppelte Bilder auszublenden für schlecht und würde diese Funktion komplett rausnehmen.
2. Wenn die Funktion drin bleiben soll, MUSS der Vergleich der Dateigröße auf einem größeren Bild gemacht werden, da hier die Wahrscheinlichkeit, nicht identische Bilder anhand der Größe falsch als identisch zu erkennen geringer ist. Es sollte mindestens PFAD_PRODUKTBILDER_NORMAL als Basis genommen werden.
Die Sektion muß somit lauten:
Code:
$cBildGroesse_arr = array(); // Nur Bilder die max. 1x vorhanden sind
$nKombiVorschauAnzahl = count($oVariationKombiVorschau_arr);
foreach($oVariationKombiVorschau_arr as $i => $oVariationKombiVorschau)
{
/*
unset($oArtikelTMP);
unset($oArtikelOptionenTMP);
$oArtikelTMP = new Artikel();
$oArtikelTMP->fuelleArtikel($oVariationKombiVorschau->kArtikel, $oArtikelOptionenTMP);
*/
// Kostet zuviel Performence, dadurch koennten aber doppelte Bilder eingefuegt werden
/*
if($nKombiVorschauAnzahl <= 50)
{
*/
if(in_array(@filesize(PFAD_ROOT . PFAD_PRODUKTBILDER_NORMAL . $oVariationKombiVorschau->cPfad), $cBildGroesse_arr))
{
unset($this->oVariationKombiVorschau_arr[$i]);
}
else
{
$this->oVariationKombiVorschau_arr[$i] = new stdClass();
$this->oVariationKombiVorschau_arr[$i]->cURL = URL_SHOP . "/navi.php?a=" . $this->kArtikel . "&a2=" . $oVariationKombiVorschau->kArtikel;
$this->oVariationKombiVorschau_arr[$i]->cName = $oVariationKombiVorschau->cName;
$this->oVariationKombiVorschau_arr[$i]->cBildMini = PFAD_PRODUKTBILDER_MINI . $oVariationKombiVorschau->cPfad;
$this->oVariationKombiVorschau_arr[$i]->cBildKlein = PFAD_PRODUKTBILDER_KLEIN . $oVariationKombiVorschau->cPfad;
$this->oVariationKombiVorschau_arr[$i]->cBildNormal = PFAD_PRODUKTBILDER_NORMAL . $oVariationKombiVorschau->cPfad;
$this->oVariationKombiVorschau_arr[$i]->cBildGross = PFAD_PRODUKTBILDER_GROSS . $oVariationKombiVorschau->cPfad;
$cBildGroesse_arr[] = @filesize(PFAD_ROOT . PFAD_PRODUKTBILDER_NORMAL . $oVariationKombiVorschau->cPfad);
}
if(count($this->oVariationKombiVorschau_arr) == $nLimit)
break;
}
Dieser Bug dürfte bei eltlichen Usern für sporadisches Fehlen von Vorschaubildern verantwortlich sein. Das Thema gabs hier im Forum ja schon öfters!