Hallo,
da sich hier
http://www.shoppilot.net/pf/aktuelle-faq-haufige-fragen/kategorien-per-css-und-floatleft-darstellen/ eine neue Möglichkeit ergeben hat,
kann ich das Thema wieder aufleben lassen.
Der Originalcode aus dem FAQ-Thema war ja
<!--spmacro:module(content)
sub get_ebene {
my $str = ssp::get_var_page('parent_pagenr',$ssp::pgid);
if ($str == -1) {return "startseite";}
my @subpages = ssp::get_subpages($ssp::pgid);
if (scalar(@subpages) > 0) {
return "verzeichnisseite";
}
else {
return "produktseite";
}
}
sub show {
if (get_ebene() eq "verzeichnisseite") {
my @subpages = ssp::get_subpages($ssp::pgid);
foreach $sub (@subpages) {
if ($sub == 'undefined') {return;} else {last;}
}
my $out;
foreach $sub (@subpages) {
my $img = ssp::get_var_page('pimage',$sub);
if (length($img) < 3) {
$img = qq{../images/keinbild.jpg};
}
$out .= qq{<div style="float:left;margin:5px;"><div style="border:thin solid black;">\n};
$out .= qq{<a href="$ssp::xxpath?show$sub,$ssp::xxsession"><img src="../$img" border="0"></a></div>};
$out .= qq{<a href="$ssp::xxpath?show$sub,$ssp::xxsession">} . ssp::get_var_page('ptitle',$sub) . "</a>";
$out .= qq{</div>\n};
}
main::mprint $out;
}
}
-->
__content::show__
Für meine Problematik angepasst sieht das dann ab
foreach $sub (@subpages) { so aus
$count = ssp::readSQLData("SELECT IMG FROM ITEM WHERE PGID = '$sub' AND IMG <> 'images/artikel/vorschaubilder/kein_bild.jpg' ORDER BY rand() LIMIT 1","IMG");
if ($count == 1) {
$img = ssp::get_var_db("IMG");
}
else {
## Verzeichnisseite - Sammelbild!?
$found = 0;
$i = 1;
## Bildsuche in Unterkategorien auf 5 Ebenen begrenzen
do {
## zufällige Unterkategorie auswählen
$count = ssp::readSQLData("SELECT PGID FROM PAGE WHERE PPGID = '$sub' ORDER BY rand() LIMIT 1","PGID");
if ($count == 1) {
$pgid = ssp::get_var_db("PGID");
}
## zufälliges Bild in dieser Kategorie suchen
$count = ssp::readSQLData("SELECT IMG FROM ITEM WHERE PGID = '$pgid' AND IMG <> 'images/artikel/vorschaubilder/kein_bild.jpg' ORDER BY rand() LIMIT 1","IMG");
if ($count == 1) {
$img = ssp::get_var_db("IMG");
$found = 1;
}
$i++;
} until (($found == 1) || ($i == 5));
## wenn garnix gefunden wird einen Platzhalter setzen
if($i == 5) {
$img = qq{images/artikel/vorschaubilder/kein_bild.jpg};
}
}
if (length($img) < 3) {
$img = qq{images/artikel/vorschaubilder/kein_bild.jpg};;
}
danach wird das Bild mit $img wieder wie im ursprünglichen Beispiel oder nach eigenen Vorlieben ausgegeben.
Es braucht noch die Variablen
$pgid um die Kategorie unterhalb zu ermitteln,
$found um die Suche zu stoppen wenn ein Bild gefunden wurde und
$i,
zur Sicherheit um die Suche zu begrenzen, damit irgendwann mal Schluss ist.
Wenn die SQL-Serveraktivität zu hoch wird, könnte man noch die einzelnen Suchen auf TOP(1) begrenzen.
Bei mir hat es sich erstmal nicht nachteilig ausgewirkt.
Mal sehen ob ich noch ein paar Infos zu den Unterkategorien reinbringen kann.
Wenn noch jemand Ideen oder Kritik zu diesem Thema hat - immer her damit.
Schöne Grüße,
Marcel