Kategoriebild auf Verzeichnisseiten dynamisch erzeugen

Begonnen von ms, Oktober 13, 2009, 14:45:29

« vorheriges - nächstes »

0 Mitglieder und 2 Gäste betrachten dieses Thema.

ms

Hallo!

Da ich keine Kategoriebilder pflegen will bzw. das meine Warenwirtschaft (noch) nicht tut, kam mir folgender Gedanke.
Ist es möglich auf den Verzeichnisseiten statt __image__ das Bild eines beliebigen oder z.B. des ersten Artikels aus der entsprechenden Kategorie anzuzeigen?
Das würde auch etwas Abwechslung reinbringen.

Schöne Grüße!

Marcel

admin

Hallo,

für Verzeichnisseiten kann man leider keine ssp Identifier so verwenden, wie auf Produktseiten. Also z.B. das Rubrikenbild nicht per __image__ sondern per __kat::image__ ausgeben, funktioniert nicht.

Die einzige Möglichkeit ist den kompletten Seiteninhalt per ssp auzugeben.
Die Werte ermittelt man durch direkte Datenbankabfragen, wie z.B. db_query_item.
Ist nnatürlich schon etwas aufwndiger, aber prinzipell würde es funktionieren.

Gruss hop

ms

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

ms

Bin gerade noch über etwas gestolpert. Wenn man Kategorien hat, die momentan keine Artikel enthalten, zeigt diese ja Shoppilot nicht an.
Bei diesem Skript werden sie aber berücksichtigt. Ich habe einige leere Kategorien. Dann einfach eine 2. Schleife bei der Kategoriesuche einfügen...

## zufällige Unterkategorie auswählen
do {
$z1++;
$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");
## prüfen, ob Kategorie Artikel enthält (AIK=Artikel in Kategorie)
$count = ssp::readSQLData("SELECT COUNT(*) FROM ITEM WHERE PGID = '$pgid'","AIK");
$aik = ssp::get_var_db("AIK");
}
} until(($aik > 0) || ($z1 == 5));


Also auf meinem virtuellen Root-Server geht's immer noch fix genug ohne merkliche Verzögerung  ;D

Wobei ein Denkfehler noch drin sein muss. Ich habe eine Kategorie mit ein paar Unterkategorien, die sich durch nix unterscheidet und dann die gesammten
Unterkategorien nicht angezeigt werden  ???

ms

Zitat
Wobei ein Denkfehler noch drin sein muss. Ich habe eine Kategorie mit ein paar Unterkategorien, die sich durch nix unterscheidet und dann die gesammten
Unterkategorien nicht angezeigt werden.

So diesen Fehler habe ich nun auch noch gefunden. Für alle, die es interessiert:

Wenn unterhalb einer Verzeichnisseite nur Verzeichnisseiten sind, muss man ja per ssp::readSQLData deren Unterkategorien ermitteln um an Bilder zu kommen.
Dabei habe ich zwar Verzeichnisseiten aber Produktseiten nicht richtig berücksichtigt. Also auch deren PPGID ("Oberkategorie") muss separat ermittelt werden.

Ich habe es jetzt ins "Produktivsystem" überführt und bin mit der Perfomance sehr zufieden.

Mir kam noch der Gedanke, die Ansicht für den Benutzer per Drop-Down-Liste oben auf den Verzeichnisseiten auswählbar zu machen.
Also Bild, Zufallsbild oder ohne Bilder - für jene, die es schlicht mögen oder mit langsamen Verbindungen surfen.

Hat jemand eine Idee, wie man das am sinnvollsten speichern könnte?

Für den unbekannten Kunden müsste ich sicher einen Cookie nehmen. Das nur an der Session festzumachen (falls das überhaupt geht) halte ich nicht für sinnvoll.
Bei registrierten Benutzern sollte es am besten immer beim Benutzer hinterlegt sein.


Schöne Grüße,

Marcel