[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Merkzettel ... - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

Merkzettel ...

12. Mär 2007, 01:33

Hi,

ich hab einen Codeschnipsel, den ich früher schon mehrfach verwendet habe, um eine Art Merkzettel oder einen Mini-Warenkorb bei einer Website einzubauen. Dies waren allerdings Websites ohne Redaxo.

Eigentlich - so dachte ich - müste das auch innerhalb von Redaxo funktionieren, tut es aber nicht. Wisst Ihr, woran es hakt?

Ins Template ganz zu Beginn kommt:

Code: Alles auswählen

<?
$shoppingcart = array();
session_start();
session_register('shoppingcart');

if ($add != "") {
$shoppingcart[$add] = 1;
header("Location: $PHP_SELF".SID);
exit();
}
?>
Der Aufruf, um ein Produkt auf diesen Merkzettel zu setzen lautet dann:

Code: Alles auswählen

<a href="<?php echo $PHP_SELF.'&add=8'; ?>">Merken</a>
Das Auslesen des Arrays hatte ich dann so:

Code: Alles auswählen

<?php 
$anzahl=0;
foreach ($shoppingcart as $key=>$elem) {
 if ($elem==1) {
  $anzahl+=1;
 }
}
echo $anzahl;
?>
...

Allerdings klappt das nicht innerhalb von Redaxo, auch wenn ich $PHP_SELF gegen rex_getUrl ersetze. Das Array bleibt nach dem Klick auf den Link leer.

hat jemand einen Tipp, warum nicht?

Danke und schöne Grüße,
Peter.

Benutzeravatar
alex2911
Beiträge: 567
Registriert: 20. Jul 2005, 04:13
Wohnort: Österreich
Kontaktdaten: Website

12. Mär 2007, 03:01

Code: Alles auswählen

if ($add != "") { 
funktioniert nur wenn register_globals auf on steht.
Ansonsten muss es

Code: Alles auswählen

if ($_GET['add'] != "") { 
lauten.
Schöner finde ich jedoch

Code: Alles auswählen

if ((int)$_GET['add'] != "0")
Davon abgesehen schau mal was bei $PHP_SELF rauskommt. Auch &add=8 bringt nicht viel da index.php&add=8 keinen Sinn ergibt.
index.php?add=8 ist schon was anderes. Jedoch auch hier fehlt article_id sodaß es besser wäre: rex_getUrl($article_id, "0")
Als 3. Parameter kannst Du bei rex_getUrl eine Array mit add=8 einsetzen.
Müsste etwa so aussehen:

Code: Alles auswählen

rex_getUrl($article_id, "0", array("add" => "8"))
soweit ich es noch im Kopf habe.


//Edit zu register_globals:
php.net hat geschrieben:Beispiel 29.1. Mit register_globals=on arbeiten

<?php
if ($username) { // kann vom User mit get/post/cookies übermittelt werden
$good_login = 1;
}

if ($good_login == 1) { // kann vom User mit get/post/cookies übermittelt werden
fpassthru ("/highly/sensitive/data/index.html");
}
?>

Beispiel 29.2. Mit register_globals = off arbeiten

<?php
if($_COOKIE['username']){
// kann nur von einem Cookie kommen
$good_login = 1;
fpassthru ("/highly/sensitive/data/index.html");
}
?>
Und hier noch Tipps zu session_start:
session_start (cookie-basierend) kann nur vor Ausgabe von html-Code gestartet werden.
Ich empfehle auch, sessions in der Datenbank zu speichern um das Einfügen von session_id's zu verhindern.
Quasi nach dem Motto:
Wenn eine SID in der URL oder im cookie gefunden wurde, schaue in der Datenbank nach und überprüf die Zeit des letzten Zugriffes. Wenn länger als 15 minuten oder nicht vorhanden, vergebe eine neue Session und verwerfe die aktuelle :)

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

12. Mär 2007, 11:27

Hi Alex,

vielen Dank für Deine vielen Tipps.
Bin sie alle mal durchgegangen. Funktioniert aber trotzdem noch nicht.

1.
register_globals ist on. Hab trotzdem mal mit $_GET['add'] experimentiert, aber erfolglos.

2.
Das rex_getUrl hatte ich gestern auch noch eingesetzt ...

3.
session_start steht ganz zun Beginn als allererste Zeile im Template.



Stand der Dinge:

Ganz oben im Template:

Code: Alles auswählen

<?
$shoppingcart = array();
session_start();
session_register('shoppingcart');

if ((int)$_GET['add'] != "0") {
 $shoppingcart[] = $_GET['add'];
 $artid = rex_getUrl($article_id, 0, 0);
 header("Location: $artid");
 exit();
}
?>
Link zum Hinzufügen des Artikels:

Code: Alles auswählen

<a href="<? echo rex_getUrl($article_id, 0, array('add' => "8")); ?>">Bestellen</a>
Anzeige der Artikel im Korb:

Code: Alles auswählen

<?=count($shoppingcart)?>
Die Anzeige bleibt aber immer auf 0. Bin ratlos. Hast Du noch eine Idee?
Und vielen Dank für die Mühe, die Du Dir mit mir gemacht hast ...

Viele Grüße,
Peter.

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

12. Mär 2007, 12:02

Hi Peter,

statt $PHP_SELF versuche $_SERVER['PHP_SELF']

Gruß,
Markus

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

12. Mär 2007, 12:08

Hi Markus,

danke, aber das hab ich auch schon versucht.
Mit

Code: Alles auswählen

header("Location: $_SERVER[PHP_SELF]");
gelange ich danach auf die Startseite, und das Array ist trotzdem noch leer.

Ich denke, dass

Code: Alles auswählen

 $artid = rex_getUrl($article_id, 0, 0);
 header("Location: $artid"); 
eigentlich schon der beste Weg sein müsste, oder?


Danke,
Peter.

Benutzeravatar
alex2911
Beiträge: 567
Registriert: 20. Jul 2005, 04:13
Wohnort: Österreich
Kontaktdaten: Website

12. Mär 2007, 19:25

Code: Alles auswählen

<? 
$article_id = $this->getValue("article_id");
session_start(); 

if ((int)$_GET['add'] != "0") { 
 $_SESSION["shoppingcart"][] = (int)$_GET['add']; 
 $artid = rex_getUrl($article_id, 0); 
 header("Location: $artid"); 
 exit(); 
} 
echo '<pre>';
print_r($_SESSION);
echo '</pre>';
?>

<a href="<? echo rex_getUrl($article_id, 0, array('add' => "8")); ?>">Bestellen</a>
Getestet und läuft :)

PS: Hier ne Demo:
http://www.jungwirth-media.at/55-0-testdel.html

Und hier der Code dazu:

Code: Alles auswählen

<? 
$article_id = $this->getValue("article_id");
session_start(); 
if ($_GET['sesdes'] == true){
 session_destroy();
 $artid = rex_getUrl($article_id, 0); 
 header("Location: $artid"); 
 exit(); 
}

if ((int)$_GET['add'] != "0") { 
 $_SESSION["shoppingcart"][] = (int)$_GET['add']; 
 $artid = rex_getUrl($article_id, 0); 
 header("Location: $artid"); 
 exit(); 
}
?>
<a href="<? echo rex_getUrl($article_id, 0, array('add' => rand(1,10))); ?>">Bestellen</a> | <a href="<? echo rex_getUrl($article_id, 0, array('sesdes' => "true")); ?>">Warenkorb leeren :)</a><br />

<?php 
if (sizeof($_SESSION["shoppingcart"]) != 0){
  echo '<pre>';
  print_r($_SESSION["shoppingcart"]);
  echo '</pre>';
}
?>

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

12. Mär 2007, 20:12

Yeah! Vielen Dank.
Wünsch Dir was von mir ...

Lg,
Peter.

Benutzeravatar
alex2911
Beiträge: 567
Registriert: 20. Jul 2005, 04:13
Wohnort: Österreich
Kontaktdaten: Website

12. Mär 2007, 20:20

pbickel hat geschrieben:Wünsch Dir was von mir ...
Ich wünsche mir den Weltfrieden :P

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

12. Mär 2007, 20:23

Mach ich. kein Problem ... 8)

Benutzeravatar
Richard.Laing
Beiträge: 2105
Registriert: 28. Aug 2005, 00:55
Wohnort: Brühl / Rheinland
Kontaktdaten: Website

10. Sep 2008, 08:47

hallo

ich habe den post schon mal reingestellt, der ist wohl leider untergegangen... ;)

hier nochmal die fragen an die profis:

alter eintrag:

http://forum.redaxo.de/ftopic8358.html? ... merkzettel

in der demo

http://www.jungwirth-media.at/55-0-testdel.html

klappt es mit dem bestellen eines artikel (mehrfach) also 2 x den selben. bei meiner version die ich aus dem wiki habe kleider nicht.

alles geht ausser wenn ich einen artikel mehrfach haben möchte.
vielleicht wisst ihr ja rat für mich.
danke gruß richy

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

10. Sep 2008, 08:58

Hallo Richy,

hast Du mal einen Link, wo man sic das Ganze bei Dir ansehen kann?

Peter.

Benutzeravatar
Richard.Laing
Beiträge: 2105
Registriert: 28. Aug 2005, 00:55
Wohnort: Brühl / Rheinland
Kontaktdaten: Website

10. Sep 2008, 09:30

ist auf dem weg per pn
gruß richy

EDIT Danke für die Schnelle hilfe.

LÖSUNG war: mein fehler ;)

Code: Alles auswählen

$id["menge"] ;
mußte noch mit in die ausgabe.

Benutzeravatar
himmelreich
Beiträge: 51
Registriert: 1. Mär 2007, 09:56

27. Nov 2008, 23:45

Hallo richy,

kannst du es ausführlich beschreiben?

Gruß
Himmelreich

Benutzeravatar
Richard.Laing
Beiträge: 2105
Registriert: 28. Aug 2005, 00:55
Wohnort: Brühl / Rheinland
Kontaktdaten: Website

28. Nov 2008, 09:23

hi himmelreich...
ich habe das ganze mal für einen pizzadienst gebaut, klappt auch ganz gut. ersetzt aber kein shopsystem.

der anfang

das hier in dein default template ganz nach oben damit der ganze klumpatsch erst mal in eine session geschrieben wird und du später drauf zugreifen kannst.

Code: Alles auswählen

<?php 
session_start(); // brauch natürlich nur einmal im template zu sein

$artid = rex_getUrl($this->getValue('article_id'), $REX['CUR_CLANG']); 
if ((int)$_REQUEST['add'] != "0") { $_SESSION["shoppingcart"][(int)$_REQUEST['add']]["menge"] += 1; 

$artid = rex_getUrl($this->getValue('article_id'), $REX['CUR_CLANG']); 

header("Location: http://". $_SERVER['HTTP_HOST'] ."/".$artid); exit(); } 
if ((int)$_REQUEST['remove'] != "0") { unset($_SESSION["shoppingcart"][(int)$_REQUEST['remove']]); 

$artid = rex_getUrl($this->getValue('article_id'), $REX['CUR_CLANG']); 

header("Location: http://". $_SERVER['HTTP_HOST'] ."/".$artid); exit(); 
} 
?>

einen artikel anlegen der *offline* bleibt. (nenn ihn merkzettel oder so)

block per modul minibeispiel php einpflegen:

hier zu bekommen http://www.redaxo.de/165-Moduldetails.html?module_id=9

Code: Alles auswählen

<?php if (sizeof($_SESSION["shoppingcart"]) != 0) {  
    echo '<h1 class="bestellen">Bisher auf dem Lieferschein:</h1>';  
    $db_korb = " SELECT * FROM rex_article_slice WHERE modultyp_id = '79'";  
    $prods = new rex_sql; $prods->setQuery($db_korb);      
    for ($i=0;$i<$prods->getRows();$i++) {     
    foreach ($_SESSION['shoppingcart'] as $pid => $id) {     
    if ($pid == $prods->getValue("id")) {  
    echo ' <div class="merkzettel"> ';  
    echo ' <h3 class="bestellen">'.$id["menge"].' x '.$prods->getValue("value1").' - '.$prods->getValue("value2").', a '.$prods->getValue("value4").' 
    <br><a href="'.rex_getUrl($prods->getValue("article_id")).'">  Mehr Information ...</span></a></h3>  <p><a  class="entfernen" href="'.rex_getUrl($this->getValue(article_id), $REX["CUR_CLANG"], array('remove'=>$prods->getValue("id"))).'"> Vom Lieferschein löschen</a></p></div> ';      
    $products_mail .= $id["menge"]." x "; $products_mail .= $prods->getValue("value1")." - ";    $products_mail .= $prods->getValue("value2")."\n";     
    $products_mail .= $prods->getValue("value3")." a "; $products_mail .= $prods->getValue("value4")."\n"; } }  
    $prods->next(); } ; } else { echo '<h1>Ihr Lieferschein ist leer</h1>'; }  
?>

im gleichen artikel (merkzettel) als zweiten block das hier:
achtung die 13 im form link bitte gegen die id des angelegten artikel tauschen.

Code: Alles auswählen

<?php if ($_GET[action] != "send") {?> 
<div class="bestell_form"> 
  <form name="form1" method="post" action="index.php?article_id=13&action=send"> 
    <label>Name:</label> 
    <input type="text" name="nachname" id="nachname"> 
    <label>Strasse:</label> 
    <input type="text" name="strasse" id="strasse"> 
    <label>PLZ:</label> 
    <input type="text" name="plz" id="plz"> 
    <label>Ort:</label> 
    <input type="text" name="ort" id="ort"> 
    <label>Telefon:</label> 
    <input type="text" name="telefon" id="telefon"> 
    <label>E-Mail:</label> 
    <input type="text" name="email" id="email"> 
    <input type="submit" name="send" id="send" value="send"> 
  </form> 
</div> 
<?php } ?> 
weiterverarbeiten als email versenden... dein job :)

im default template an der stelle wo der warenkorb erscheinen soll.
im link bitte das: .rex_getUrl(13,0). also die 13 ändern in die merkzettel artikel id

Code: Alles auswählen

<?php if (sizeof($_SESSION["shoppingcart"]) != 0){ echo ' <div id="order">  <p>'; echo (count($_SESSION["shoppingcart"])); if (count($_SESSION["shoppingcart"]) == 1) { echo ' Produkt'; } else { echo ' Produkte'; } echo '<br /> auf Ihrem Lieferschein.<br />  <a href="'.rex_getUrl(13,0).'">bestellen</a></p>  </div>'; } ?>
das bestellen modul mit dem du die zu bestellenden artikel anlegst

eingabe anpassen an die eigenen bedürfnisse:

Code: Alles auswählen

 
Gericht Nummer:<br /> 
<input type="text" size="80" name="VALUE[1]" value="REX_VALUE[1]" /><br />
Gericht Name:<br /> 
<input type="text" size="80" name="VALUE[2]" value="REX_VALUE[2]" /><br />
Gericht Beschreibung:<br /> 
<input type="text" size="80" name="VALUE[3]" value="REX_VALUE[3]" /><br />
Gericht Preis:<br /> 
<input type="text" size="80" name="VALUE[4]" value="REX_VALUE[4]" /><br />
ausgabe anpassen an die eigenen bedürfnisse:

Code: Alles auswählen

<div class="bestellung">
<span class="red">REX_VALUE[1] REX_VALUE[2]</span>
<span class="red">REX_VALUE[4]</span>
<div class="g_beschreibung">REX_VALUE[3]</div>
<?php echo ' <a class="bestellen2" href="'.rex_getUrl($this->getValue(article_id), $REX["CUR_CLANG"], array('add'=>REX_SLICE_ID)).'">bestellen</a>'; ?>
</div>
und nun beten und dann sollte alles klappen :)
ich hoffe das ich dir helfen konnte.

gruß richy

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

28. Nov 2008, 09:36

Und als Ergänzung hier nochmal meine Beschreibung im Wiki:
http://wiki.redaxo.de/index.php?n=R3.Merkzettel

Benutzeravatar
Richard.Laing
Beiträge: 2105
Registriert: 28. Aug 2005, 00:55
Wohnort: Brühl / Rheinland
Kontaktdaten: Website

28. Nov 2008, 09:41

hi peter
wollte ich nicht unterschlagen, da schauen leider nicht immer alle user rein, da es unter redaxo 3 steht.
super sache die du da gebaut hast, für mal schnell einen kleinen shop zu bauen.
gruß richy

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

28. Nov 2008, 09:47

Hi Richy,

schon klar, ich find's ja auch gut, dass Du es in s Forum geschfreiben hast. Ich dsachte nur, zwei Quellen sind besser als eine, weil es vielleicht jeder ein klein bisschen anders macht.
Und ich finde solche Sachen im WIKI oft leichter al im Forum.

Komisch nur, dass im Breadcrum R3 auftaucht. Denn ich habs eigentlich in die Kategorie 4 geschrieben, da kommt man auch über die Navigation hin:
http://wiki.redaxo.de/index.php?n=R4.Sonstiges

Schöne Grüße,
Peter.

Benutzeravatar
mow
Beiträge: 73
Registriert: 2. Jul 2007, 01:49
Kontaktdaten: Website

27. Feb 2009, 21:28

alex2911 hat geschrieben:PS: Hier ne Demo:
http://www.jungwirth-media.at/55-0-testdel.html
hallo alex2911
kannst du bitte die verschiedenen codeschnipsel dieser demo posten?
ich habe alle hinweise und ideen zum thema merkzettel durchgespielt. funktioniert soweit auch bestens.
ich möchte bei der menge +/-1 einsetzen und zwar wie in deinem beispiel so, dass bei 0 der artikel aus dem warenkorb entfernt wird (hab ich noch nicht ganz im griff). ev auch mit einer zusätzlichen möglichkeit den artikel direkt zu löschen (nicht über den 'umweg' der 0-menge). ebenso soll die möglichkeit 'ganzer warenkorb leeren' dazu kommen (hab ich im griff).
bei mir funktioniert das ganze noch nicht ganz so wie ich es will. aber bevor ich dir mit fragen deine zeit raube, würde ich es gerne selber nachvollziehen können, wo bei mir der fehler liegt.

danke dir.
lg mow
best viewed with an open mind!

Benutzeravatar
alex2911
Beiträge: 567
Registriert: 20. Jul 2005, 04:13
Wohnort: Österreich
Kontaktdaten: Website

4. Mär 2009, 00:52

hi

kein thema - mach ich noch im laufe der nacht.

lg alex


//edith

Schon da - es war nur als Template verpackt - dh. nur template anlegen, dem artikel (leer) hinzufügen - fertig.

Code: Alles auswählen

<? 
$buecherarray["1"] = "Schneewitchen und die 9 Riesen";
$buecherarray["2"] = "Die Wunder von Seehausen";
$buecherarray["3"] = "Der große Sauhaufen";

$article_id = $this->getValue("article_id");
session_start(); 
if ($_GET['sesdes'] == true){
 session_destroy();
 $artid = rex_getUrl($article_id, 0); 
 header("Location: $artid"); 
 exit(); 
}

if ((int)$_GET['add'] != "0") { 
 $_SESSION["shoppingcart"][(int)$_GET['add']]["menge"] += 1;
 $artid = rex_getUrl($article_id, 0); 
 header("Location: $artid"); 
 exit(); 
}
if ((int)$_GET['remove'] != "0") { 
if ($_SESSION["shoppingcart"][(int)$_GET['remove']]["menge"] > 1){
 $_SESSION["shoppingcart"][(int)$_GET['remove']]["menge"] -= 1;
} else {
unset($_SESSION["shoppingcart"][(int)$_GET['remove']]);
}
 $artid = rex_getUrl($article_id, 0); 
 header("Location: $artid"); 
 exit(); 
}
?>
<a href="<? echo rex_getUrl($article_id, 0, array('sesdes' => "true")); ?>">Warenkorb leeren :)</a><br /><br />

<?php 
if (sizeof($_SESSION["shoppingcart"]) != 0){
  foreach ($_SESSION['shoppingcart'] as $shopid => $id){
    echo "Buch Titel: " . $buecherarray[$shopid] . " | ID: " . $shopid . ' | Menge: ' . $id["menge"] . '  |  <a href="' . rex_getUrl($article_id, 0, array('remove' => $shopid)) . '">Menge -1</a><br />';
  }
}
?>
<br /><br /><b>Willkommen im Büchershop des Beispielhauses Schlumpfhausen ;)<br />Bitte suchen Sie Sich ein Buch aus: </b><br /><br />
<div style="float:left; width:200px; min-width:200px; text-align:center; "><a href="<? echo rex_getUrl($article_id, 0, array('add' => "1")); ?>"><img src="http://noefv.at/newsbilder/rotekarte2_sml_100.jpg" border="0"></a></div>
<div style="float:left; width:200px; min-width:200px; text-align:center; "><a href="<? echo rex_getUrl($article_id, 0, array('add' => "2")); ?>"><img src="http://noefv.at/newsbilder/logogruppensitzung_sml_100.jpg" border="0"></a></div>
<div style="float:left; width:200px; min-width:200px; text-align:center; "><a href="<? echo rex_getUrl($article_id, 0, array('add' => "3")); ?>"><img src="http://noefv.at/newsbilder/finanzsteuerfibel_sml_100.jpg" border="0"></a></div>

Benutzeravatar
mow
Beiträge: 73
Registriert: 2. Jul 2007, 01:49
Kontaktdaten: Website

4. Mär 2009, 15:20

hallo alex
danke, damit werde ich meinen fehler sicher bereinigen können.
gruss
mow
best viewed with an open mind!

Zurück zu „Sonstiges“