"weitere Seiten" für Varianten

Begonnen von dobra, August 07, 2008, 15:19:04

« vorheriges - nächstes »

0 Mitglieder und 1 Gast betrachten dieses Thema.

dobra

Hallo,

mal wieder ein kleines Beispiel, daß man mit ShopPilot wirklich jede Idee realisieren kann  ;D

Aufgabe:
wenn man sehr viele Varianten (mit vielen Bildern) verwendet, kann es schon mal vorkommen, daß die Seite sehr lang wird, bzw. bei langsamer Internetwebindung die Ladezeit ziemlich lang ist.
Abhilfe -> "weitere Seiten" auch für Varianten!
Der Kunde soll aber damit nicht "zwangsbeglückt" werden, sondern sich das - wie es ja jetzt auch bei Artikeln möglich ist - selber wählen können, ob er alle Arikel oder nur einen Teil pro Seite sehen will.
Die "weiteren Seiten" sollen auch nur bei denjenigen Artikeln angezeigt werden, bei denen es Sinn macht.
Außerden kann man für jeden Artikel - je nach Platzbedarf - anderen Artikelanzahl einstellen ab welcher die nächste Seite angezeigt wird.

Lösung:
(leider ist das aber keine "universelle" Lösung - funktioniert so nur, wenn man die Varianten mit
...
my $anzahl = $_[3];
...
for (my $i=0;$i<=$anzahl;$i++){ ...

- wie in Demo-Carshop - ausgibt)


  • ein Arikelfeld "MYWSEITEN" anlegen
  • in diesem Feld wird die Artikelzahl eingetragen, die pro Seite angezeigt werden soll.
    Bleibt das Feld leer, gibt es für diesen Artikel keine "weiten Seiten" und die Anzeige im Shop ist so wie bisher.
  • eine "varianz.ipl" Datei anlegen, im WC unter "Dateien hinzufügen" eintragen und mit
    <!--spmacro:include(scripts/varianz.ipl)--> (Pfad gegebenenfalls anpassen)
    in die stdall.ipl einbinden.
    (der Code kann aber auch direkt in die stdall.ipl geschrieben werden)
  • Code für die Auswahlbox -> Kundenwahl, wie er die Anzeige haben möchte
<!--spmacro:module(check)
sub wseit {
my $mywsfeld = ssp::get_var_article('MYWSEITEN');
if (length($mywsfeld)) {
my $itemid = ssp::get_var_article("itemid");
my $out = qq|
<form method="post" action="$ssp::xxpath?showd$ssp::pgid,__xxsession__,$itemid">
<select name="ausform" size="1" onchange="this.form.submit()">
<option value="1" >$mywsfeld </option>
<option value="alle" __check::selected__>alle</option>
</select>
</form> Farben pro Seite anzeigen |;
main::mprint $out;
my $wert = ssp::qform(ssp::get_var_form('ausform'));
if ($wert ne "undefined") {
ssp::cart_write_var('wseit', $wert);
}
}
}

sub selected {
  my $sel = ssp::cart_read_var('wseit');
  if ($sel eq "alle") {main::mprint "selected";};
}
-->

  • die Listbox wird auf der Detailseite an beliebiger Stelle mit
    __check::wseit__
    ausgegeben
  • nun zum komplizierteren Teil (hier muß vermutlich einiges angepasst werden)
  • ich gehe mal dvon aus, daß die Varianten auf der Detailseite so oder so änlich - ausgegeben werden
    <!--spmacro:pagetype(1)-->
    <form method="post" name="detail" id="detail" action="http://__xxpath__?placecart,__xxsession__" onsubmit="return ValidateForm(this);">
          ....
          __vari::ausgeben__
          ....
    </form>
  • der Scriptteil
    <!--spmacro:module(vari)
    sub ausgeben ....
    -->
    muß jetzt um etliche Codesnipsel ergänzt werden -> rot markiert{


<!--spmacro:module(vari)
sub ausgeben {
   my $anzahl = $_[3];
      my $anzges = $anzahl + 1;
      my $anzshow = $anzahl;
      my $start;
      my $start2;
      my $mywsfeld = ssp::get_var_article('MYWSEITEN');
      my $auswahl = ssp::cart_read_var('wseit');
      if (length($auswahl)) {$mywsfeld = $auswahl;}
      if ((!length($mywsfeld)) || $auswahl eq "alle") {$mywsfeld = $anzahl;}   

.....         
   my $ausgabe= "";
   my $itemid = ssp::get_var_article("itemid");

...
...
   $ausgabe .= qq|<table width="650" border="0" cellspacing="0" cellpadding="0" class="farbtabelle">|;

      my $seite1 = qq|
         <form method="post" name="mywseiten" action="$ssp::xxpath?showd$ssp::pgid,__xxsession__,$itemid">
         <input type="hidden" name="vseite" value="1">
         <input type="submit" value="Seite 1">
         </form>
      |;   
      my $seite2 = qq|
         <form method="post" name="mywseiten" action="$ssp::xxpath?showd$ssp::pgid,__xxsession__,$itemid">
         <input type="hidden" name="vseite" value="2">
         <input type="submit" value="Seite 2">
         </form>
      |;   
      my $seite3 = qq|
         <form method="post" name="mywseiten" action="$ssp::xxpath?showd$ssp::pgid,__xxsession__,$itemid">
         <input type="hidden" name="vseite" value="3">
         <input type="submit" value="Seite 3">
         </form>   
      |;
      
   my $falle =  ssp::cart_read_var('wseit');
   my $mywsfeld3 = ssp::get_var_article('MYWSEITEN');
   my $zeigeanz = $mywsfeld3;
   if (length($mywsfeld3) && $anzahl > "$mywsfeld3" && $falle ne "alle") {
   my $wobinich = ssp::qform(ssp::get_var_form('vseite'));
   if ($wobinich eq "undefined" && $anzahl > $mywsfeld3) {$start = 0; $anzshow = $mywsfeld3 - 3;  $seite1 = qq| <b><font color="red">&nbsp;Seite 1</font></b>|;}
   if ($wobinich eq "1") {$start = 0; $anzshow = $mywsfeld3 - 3; $seite1 = qq| <b><font color="red">&nbsp;Seite 1</font></b>|;}
   if ($wobinich eq "1" && $anzahl < $mywsfeld3) {$start = 0; $anzshow = $anzahl; $seite1 = qq| <b><font color="red">&nbsp;2</font></b>|;}
   if ($wobinich eq "2" && $anzahl > (2*$mywsfeld3)-1) {$start = $mywsfeld3; $anzshow = 2*$mywsfeld3; $seite2 = qq| <b><font color="red">&nbsp;Seite 2</font></b>|; $zeigeanz = $anzshow +1;}
   if ($wobinich eq "2" && $anzahl < (2*$mywsfeld3)+1) {$start = $mywsfeld3; $anzshow = $anzahl; $seite2 = qq| <b><font color="red">&nbsp;Seite 2</font></b>|; $zeigeanz = $anzshow +1;}
   if ($wobinich eq "3" && $anzahl > (3*$mywsfeld3)-1) {$start = 2*$mywsfeld3; $anzshow = 3*$mywsfeld3; $seite3 = qq| <b><font color="red">&nbsp;Seite 3</font></b>|; $zeigeanz = $anzshow +1;}
   if ($wobinich eq "3" && $anzahl < (3*$mywsfeld3)+1) {$start = 2*$mywsfeld3; $anzshow = $anzahl; $seite3 = qq| <b><font color="red">&nbsp;Seite 3</font></b>|; $zeigeanz = $anzshow +1;}

         $start2 = $start + 1;
   }
      if ((length($mywsfeld3)) && $anzahl > (2*$mywsfeld3)-1 && $falle ne "alle") {
   $ausgabe .= qq|
   <tr><td colspan="12" nowrap align="center"><b>Farbe $start2 - $zeigeanz</b> <i>von insgesamt $anzges Farben</i>  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
      $seite1 $seite2 $seite3<br><br></td>
   |;
   }
   if ((length($mywsfeld3)) && $anzahl > $mywsfeld3 && $anzahl <= (2*$mywsfeld3)-1 && $falle ne "alle") {
   $ausgabe .= qq|
   <tr><td colspan="12" nowrap align="center"><b>Farbe $start2 - $zeigeanz</b> <i>von insgesamt $anzges Farben</i>  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
   $seite1  $seite2<br><br></td>
   |;
   }      

   
   $ausgabe .= qq|
   <form method="post" name="detail" id="detail" action="http://__xxpath__?placecart,__xxsession__" onsubmit="return ValidateForm(this);">|;
   for ($i=$start;$i<=$anzshow;$i=$i+3)  {   
....
hier steht die bisherige Variantenausgabe      
....
   $ausgabe .= qq|</table>
        <center>
      <table width="570" border="0" cellspacing="0" cellpadding="2">
      <tr>
         <td align="right"> <font size="-2" valign="top"> ausgewählte Farben in Warenkorb legen &nbsp;</td>
         <td><input style="border:none" type=image src="../images/other/warenkorb.gif"></font></td>
      </tr>
      </table>
   </form><br>|;
   
   main::mprint $ausgabe;
}
-->


  • den Ausgabeteil auf der Detailseite nun so ersetzen:
    <!--spmacro:pagetype(1)-->
          __vari::ausgeben__

  • mit diesem Script können bis zu 3 "weitere Seiten" ausgegeben werden.
    Bei Bedarf kann das auch auf mehr Seiten ergänzt werden.

Live Demo 1 (30 Varianten pro Seite)
Live Demo 2 (12 Varianten pro Seite)

Wenn der Kunde "alle" auswählt = alle Varianten auf einer Seite anzeigen
bleibt diese Einstellung für ihn gespeichert bis er wieder eine Teilansicht wählt.

Ich habe auch ein wenig damit herumgespiel, dem Kunden auch andere als die vorgegebene Variantenanzahl auswählen zu lassen wie bei der fertigen Shoplösung für Artikel.
Also z.B. vorgegeben "30"
mögliche Auswahl: "alle", "15", "30", "45"

Auch das ist machbar  :D  - war mir aber dann doch zu aufwendig das fertig zu programmieren  ;)
mfG
dobra