Kategorien per CSS und float:left darstellen.

Begonnen von admin, Dezember 07, 2010, 11:05:16

« vorheriges - nächstes »

0 Mitglieder und 1 Gast betrachten dieses Thema.

admin

Bei der Darstellung von Kategorien benutzt man im einfachsten Fall die Indentifier __titel__ und oder _seite__ und __image__ . Diese fügt man dann eine Tabelle ein. Und zwar so oft wie die erwartete max. Zahl von Kategorien. Das es für Kategorieren kein Loopitem gibt,  bzw Looppage müßte es ja dann heißen, war dies bisher die am meisten angewandte Methode. Diese Methode hat allerdings u.a. den Nachteil, dass man keine weiteren festen Gestalltaungsbestandteile verweden kann, denn diese würde als leere Kästchen erscheinen, fallls die Kategoriezahl zu gering ist.

Eine alternative Möglichkeit ergibt sich, dann wenn man den kompletten Inhalt der Seite per SSP ausgibt. Auch auf Tabellendesign wird verzichtet, sattdessen wird ein Floating-Design genutzt.  


<!--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__         


ms

Hallo!

Ist ja eine super Sache. Da kommt mein Traum, Kategoriebilder auf Verzeichnisseiten per Zufall oder zumindes dynamisch zu erzeugen, ein Stück näher.
Siehe http://www.shoppilot.net/pf/ssp-shop-server-pages/kategoriebild-auf-verzeichnisseiten-dynamisch-erzeugen/

Ich habe mal folgendes ausprobiert:


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;
     my $count;
     my $img;

     foreach $sub (@subpages) {
        $count = ssp::readSQLData("SELECT IMG FROM ITEM WHERE PGID = '$sub' ORDER BY rand() LIMIT 1 ","IMG");
if ($count > 0) {
$img = ssp::get_var_db("IMG");
}
else {
## Verzeichnisseite - Sammelbild!?
$img = qq{images/artikel/vorschaubilder/kategorie_sammelbild.jpg};
}

    if (length($img) < 3) {
              $img = qq{images/artikel/vorschaubilder/kein_bild.jpg};;
        }
...


Nachteil ist, dass wenn eine weitere Verzeichnisseite folgt, in der Unterkategorie ja kein Bild gefunden wird (also $count=0) und man ein Sammelbild einblenden müsste.
Ich wollte versuchen mich per SQL bis zur nächsten Produktseite "nach unten zu fragen" aber mir fehlt der Ansatz.

Der Gedanke Kategoriebilder nicht zu pflegen sondern per Zufall zu erzeugen schwirrt mir schon lange im Kopf rum.
Wie könne man das für Verzeichnisseiten lösen?


Gruß,

Marcel

dobra

Hallo ms,

hier mal ein Ansatz der vielleicht weiter hilft?
life-Demo:  http://www.schmuck-insel.com/wip-cgi-bin/schmuck-insel/iboshop.cgi?show680
hier werden die (Produkt)Bilder zufällig aus der DB geholt und auf der Verzeichnisseite mit __verz::pages__ ausgegeben

<!--spmacro:module(verz)
sub pages {
my $pagenr = $ssp::pgid;
my @subpages = ssp::get_subpages($pagenr);
foreach $sub (@subpages) {
if ($sub == 'undefined') {return;} else {last;}
}

foreach $sub (@subpages) {
my $titel = ssp::get_var_page("ptitle",$sub);
my $link = ssp::get_var_page("ppagenr",$sub);
my $seitennr = $ssp::pgid;
my $pre = ssp::db_get_prefix();
my $ITEM = $pre . 'ITEM';
my $count = ssp::readSQLData("SELECT ITEMID, MYDIMAGE FROM $ITEM WHERE PGID ='$link'  AND LENGTH(MYDIMAGE)  >  3","ITEMID","MYDIMAGE");
if ($count >= 0) {

%RANDITEMS = ();
$curIndex = -1;
srand();
my $ok = 0;
my $number = 0;
my $check = 0;
while (!$ok) {
if ($check > $count) { $curIndex = -1; return; }
$number = int(rand($count));
$ok = !(defined $RANDITEMS{$number});
if ($ok) {
$RANDITEMS{$number} = 1;
$curIndex = $number;
}
$check = $check + 1;
}

my $i= $curIndex ;
$myimg = ssp::get_var_db("MYDIMAGE",$curIndex);
$artnr = ssp::get_var_db("ITEMID",$curIndex);
my $out = qq|
<div class = "boxverz">
<h3 style="padding-top:87px"><a href = " __xxpath__?show$link,__xxsession__"> $titel</a> </h3>
</div>
|;
if ($myimg ne "undefined") {
$out = qq|
<div class = "boxverz">
<a href = " __xxpath__?show$link,__xxsession__"><img class="verzbild" src="$myimg" alt="" ></a> <h3><a href = " __xxpath__?show$link,__xxsession__"> $titel</a> </h3>
</div>
|;
}
main::mprint ($out);
}
}
}
sub titel {
my $pagenr = $ssp::pgid;
my $title = ssp::get_var_page("pdescription",$pagenr);
main::mprint ("$title");
return 0;
}
-->


css:
/* Boxen für Verzeichnisseiten */
.boxverz  {padding:0px;  float:left;
 width:180px; height:115px;
 background:url(../images/other/Rahmen_rund2.gif) top left no-repeat;
 padding:0px; margin:8px; margin-left:18px;}
.boxverz img { border:2px solid #927638; height:82px; margin-right:10px; position:relative; top:23px; left:-12px;}
.boxverz h3 {text-align:right; padding-right:12px; font-style:italic; font-weight:bold; font-size:14px; position:relative; top:-90px;}


im Template wird der Seiteninhalt so ausgegeben:
<div id="Inhalt" class="ieleft">
<div class="location">Sie befinden sich hier:<span class="myh4"><b> __location::path__</b></span> </div>
<br>
<div class="verzbanner2" nowrap>__verz::titel__ </div>
__verz::pages__

</div>


Der Code muss natürlich abgepasst werden
in meinem ben.def. Feld MYDIMAGE liegen bei diesem Shop die Bilder bereits so drin:
http://www.domain.xx/shop/pics/xl/430050x.jpg
mfG
dobra

ms

Hallo dobra,

Danke für das Beispiel. Wenn ich die SQL-Abfrage so sehe


my $count = ssp::readSQLData("SELECT ITEMID, MYDIMAGE FROM $ITEM WHERE PGID ='$link'  AND LENGTH(MYDIMAGE)  >  3","ITEMID","MYDIMAGE");


würde das ja auch nur funktionieren, wenn unterhalb der Verzeichnisseite eine Produktseite ist.

Unter:  http://www.schmuck-insel.com/wip-cgi-bin/schmuck-insel/iboshop.cgi?show680

scheint das ja auch so zu sein. Oder habe ich da etwas übersehen?


Schöne Grüße,

Marcel

dobra

Zitatwürde das ja auch nur funktionieren, wenn unterhalb der Verzeichnisseite eine Produktseite ist.

nicht unbedingt - unterhalb kann auch eine weitere Verzeichnisseite sein, allerdings müssen auf diese Seite dann Artikel mit Bildern (z.B. als Verknüpfung) liegen.

also
  1. Verzeichnisseite -> mein Code
         2. Verzeichnisseite  ->  Artikelverknüpfungen

hier würden dann auf der 1. Verzeichnisseite zufällige Bilder der verknüpften Artikel die auf der 2. Verzeichnisseite liegen ausgegeben
     
mfG
dobra

ms

Zitat
nicht unbedingt - unterhalb kann auch eine weitere Verzeichnisseite sein, allerdings müssen auf diese Seite dann Artikel mit Bildern (z.B. als Verknüpfung) liegen.

Würde zwar gehen, möchte ich aber unbedingt vermeiden.
Hintergrund: wir pflegen keinerlei Artikel und Kategorien im Workcenter sondern rein in der Warenwirtschaft.
Die einzelnen Sachbearbeiter müssten dann darauf auchten, dass sie immer mindestens einen Artikel auf einer Verzeichnisseite liegen haben, wenn da keine Produktseite drunter ist.
Damit würde ich eine "menschliche Fehlerquelle" in mein schönes "duchautomatisiertes" System einbauen.

Ich werde mal versuchen bei $count==0 weiter nach unten zu fragen und bei meherern Kategorien eventl. sogar ein Sammelbild generieren zu lassen.
Wenn ich`s hinbekomme stelle ich die Lösung als neuen Beitrag in die SSP-Kategorie ein, sonst kommt das hier durcheinander...


Schöne Grüße,

Marcel