Autor Thema: favhinzu mit ajax  (Gelesen 4090 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline dobra

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1337
  • Lob: 18
    • ShopPilot AT
favhinzu mit ajax
« am: November 29, 2008, 18:47:50 »
Hallo,

Die Idee:  ich habe (um das bis jetzt gelernte mal zu üben ;)) __favhinzu__ mit Ajax realisiert
= für Detailseiten! -> kein verlassen der Seite, kein Reload
es funktioniert alles, wie es soll  ;D ;D ;D  (viel freu)
(getestet im Woll-Insel Shop und im Demo-Carshop)

Einbauanleitung:
Voraussetzung - ajaxsearch ist bereits installiert!!!
Achtung! lokal funktioniert es nur wenn LiveView mit mySQL arbeitet!

1) die Dateien "fav.js" und "fav.ipl" im ajax-Ordner anlegen und im WC in die "Dateien hinzufügen"-Liste schreiben
fav.js:
var re = false;
function myFavnocheinVersuch(){

 if (-1 != myinterfaceFav.search(/__xxpath__\?/)) {
      return;
  }
 
  var artnr = document.getElementById('fav_artnr').value;   // diese Daten müssen als hidden Imput übergeben werden
  var kdnr = document.getElementById('fav_kdnr').value;
  var merch = document.getElementById('fav_merch').value; 
  var subcat = document.getElementById('fav_subcat').value; 
 
  var postdata = {
method : 'myfavhinzu',
id : 0,
params : [artnr, kdnr, merch, subcat]
};
try {
req = new HTTP.Request(
{
uri: myinterfaceFav,
postbody: postdata.toJSONString(),
onSuccess: function (trans) {
var data;
try {
data = eval('('+trans.responseText+')'); // JSON "parsen"
} catch(e) {
return;   
}
        var resultFav = data['_myFav']; //Wenn 1 dann Artikel neu eingetragen - 2 = Timestamp aktualisiert - 0 = Kunde nicht eingelogt, also nichts in DB geschrieben  
   
       if (resultFav == 1){
            re = false;
   alert("Artikel wurde auf dem Merkzettel notiert");
        }

       if (resultFav == 2){
            re = false;
   alert("Artikel steht bereits auf Ihrem Merkzettel");
        }

       else{
            re = false;
   alert("diese Funktion steht nur eingelogten Kunden zur Verfügung");
        }

}
     
});
}
catch(e)
{
return;
}
  if(re == true){
    return true;
  }
  else{
    return false;
  }
}

fav.ipl
<!--spmacro:module(fav)                     
push(@INC,'ajax');
require "JSON.pm";

print "Content-Type: text/plain;charset=ISO-8859-1\n\n";
#use utf8;
my $pCall = JSON::jsonToObj($main::input);
my %result;
$result{_call} = $pCall;

if ($pCall->{method} eq 'myfavhinzu') {
  $result{_myFav} = 1;
 
  my $fav_artid =  $pCall->{params}[0]; # Artikel
  my $fav_kundennr = $pCall->{params}[1]; # Kundennr
  my $fav_merch = $pCall->{params}[2]; # Händler
  my $fav_iscat = $pCall->{params}[3]; # Subkat
  my $time = time();
 
if($fav_kundennr != 'undefined') { #Kunde eingelogt
   my $OLISTTBL = ssp::db_get_prefix() . "OLIST";
  my $sql = qq|SELECT ITEMID FROM $OLISTTBL WHERE (KUNDENNR = '$fav_kundennr' && ITEMID = '$fav_artid')|;
  my $read = ssp::readSQLData($sql, "count");
if ($read){
if(ssp::get_var_db("count", 0)){  #Artikel für diesen Kunden bereits vorhanden - Timestamp aktualisieren
my $sqlupdate = qq|UPDATE $OLISTTBL SET OTIME = "$time" WHERE (ITEMID = '$fav_artid' && KUNDENNR = '$fav_kundennr')|;
    ssp::exec_sql($sqlupdate, 1);
                  $result{_myFav} = 2; }
} else { #Artikel für diesen Kunden noch nicht vorhanden - eintragen
my $sqlnew = qq|INSERT INTO $OLISTTBL (ITEMID, KUNDENNR, MERCHID, SCID, OTIME)
    VALUES ('$fav_artid', '$fav_kundennr', '$fav_merch', '$fav_iscat', '$time')|;
ssp::exec_sql($sqlnew, 1);
                    $result{_myFav} = 1; }
}
else { #Kunde nicht eingelogt
$result{_myFav} = 0; }
}

print JSON::objToJson(\%result);
exit 0;

-->

2) eine Infoseite anlegen (Titel beliebig)
für diese Infoseite eine Vorlage eintragen auf der nichts steht außer
<!--spmacro:include(ajax/fav.ipl)-->
3) auf allen Seiten, auf denen das __favhinzu__ verwendet wird diese Codezeilen in den head-Bereich schreiben
<script type="text/javascript" src="../ajax/fav.js"></script>   # Pfad event. anpassen
<script type="text/javascript">
 // Server-URL für die Ajax-Abfragen
 var myinterfaceFav = "__xxpath__?ajax1200006200,__xxsession__";  # hier die Seitennummer der neu angelegten Infoseite eintragen!
</script>

und den ssp-Code:
(kann auch in std.all geschrieben werden)
<!--spmacro:module(ajaxvari)
sub kdnr {
  my $x = ssp::get_var_user("kundennr");
 main::mprint($x);
}

sub artnr {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
my $x = ssp::get_var_article('itemid',$index);
main::mprint($x);
}
}

sub merch {
  my $x = ssp::get_var_merch("hid");
 main::mprint($x);
}

sub subcat {
  my $x = ssp::get_var_subcat("sid");
 main::mprint($x);
}
-->

4)  __favhinzu__    ersetzen mit
<form method="post" action="" onSubmit="return myFavnocheinVersuch();">
<input type="hidden" id="fav_kdnr" value="__ajaxvari::kdnr__">
<input type="hidden" id="fav_artnr" value="__ajaxvari::artnr__">
<input type="hidden" id="fav_merch" value="__ajaxvari::merch__">
<input type="hidden" id="fav_subcat" value="__ajaxvari::subcat__">
<input type="submit" class="merkzettel" value="merken">
</form>
(dieses Formular soll natürlich nie abgesendet werden, daher ist "re" immer false)
mit class="merkzettel" kann der Button beliebig formatatiert werden, daß er z.B. so ausschaut

Es passiert folgendes:
ist der Kunde nicht eingeloggt und klickt auf den "merken" Button kommt die Meldung "diese Funktion steht nur ...."
ist der Kunde eingeloggt und der Artikel steht bereits auf der Mekliste -> Meldung "der Artikel steht bereits auf Ihrem Merkzettel" und der Timestamp wird aktualisiert
ist der Kunde eingeloggt und der Artikel steht noch nicht auf der Merkliste -> Meldung " Artikel wurde draufgeschrieben" und Artikel wird in die DB geschrieben

(man könnte das natürlich noch beliebig anpassen - z.B. Inlinemeldung statt der Alertmeldung, für nicht angemeldete Kunden ausblenden usw)

P.S.: @support - wenn OK eventuell in SSP Bibliothek verschieben?

Linkback: http://www.shoppilot.net/pf/ajax-beispielanwendungen/25/favhinzu-mit-ajax/1168/
« Letzte Änderung: November 30, 2008, 18:41:56 von dobra »
mfG
dobra
______________________________
Betreute Shops:
Barrique Einzelhandel
Barrique Großhandel


exclamation
AJAX-Produktkonfigurator

Begonnen von dobra

1 Antworten
6893 Aufrufe
Letzter Beitrag Januar 07, 2010, 12:18:08
von ahe
moved
VERSCHOBEN: AJAX-Produktkonfigurator

Begonnen von dobra

0 Antworten
2278 Aufrufe
Letzter Beitrag Januar 15, 2010, 12:45:59
von dobra
xx
Ajax Product Modal

Begonnen von catwoman

4 Antworten
2379 Aufrufe
Letzter Beitrag August 31, 2017, 19:45:03
von catwoman
exclamation
allgemeines zur Verwendung von Ajax

Begonnen von dobra

0 Antworten
3911 Aufrufe
Letzter Beitrag Januar 15, 2010, 19:02:40
von dobra