CMS:USER_BASKET

Bearbeiten eines Warenkorbs.

(CMS:USER_BASKET function [parameter=wert …])

Methode: Modules\Record\RecordUser::cmsBasket()
Ohne Schlüssel: der erste Wert ohne = gilt als function

Parameter

Parameter Wert Standard Pflicht Beschreibung
function ¹ "load" / "add" / "update" / "update_addon" "load" ja Funktion, die ausgeführt werden soll.
overwrite false / true false function=add + overwrite=true: Die Anzahl der bereits gespeicherten Artikel wird beim Hinzufügen aktualisiert.
category Kategorie-ID 0 Warenkorb-Kategorie.
container Container-IDs oder -Namen, kommasepariert – Nur Datensätze aus diesen Containern kommen in den Warenkorb. Ohne Angabe: veröffentlichte Datensätze aus Containern vom Typ "record" oder "ugc" (nie Profile).
variable Variablenname – Name der Variable, in der Artikel-IDs als Array gespeichert sind.
duration Anzahl Tage 30 Anzahl der Tage, die der Warenkorb gespeichert bleibt, sofern keine Änderungen durchgeführt werden.
basket_addon Text – Text (serialisierte Daten), die gespeichert werden sollen.
csrf true / false true true: Der Request muss ein gültiges Token aus CMS:USER_TOKEN enthalten (Schutz gegen CSRF). false schaltet die Prüfung für diesen Befehl ab – nur mit gutem Grund.

¹ kann ohne Schlüssel als erster Wert angegeben werden.

Anwendung

Warenkorb je Frontend-Session - funktioniert auch ohne Anmeldung (anonyme Session). Ergebnis in $set:

$set[…] Inhalt
basket record_id => Menge
basket_count Summe der Mengen
basket_addon mit update_addon gespeicherter Text der Kategorie

Artikel hinzufügen (Formular mit items[]), Warenkorb anzeigen:

<?php $f = $_POST['f'] ?? 'load'; ?>
(CMS:USER_BASKET function="$f" variable=items)
(CMS:USER_BASKET load)
<h2>Warenkorb (<?php echo (int)$set['basket_count']; ?> Stück)</h2>
<form method="post"><input type="hidden" name="f" value="update">
  (CMS:USER_TOKEN)
(CMS:RESULT_START)
  <p>(CMS:TEXT title): <input name="items[(CMS:NUMBER record_id)]" value="<?php echo (int)$set['basket'][$cms['record_id']]; ?>" size="3"></p>
(CMS:RESULT_END)
<button>Mengen aktualisieren (0 = entfernen)</button>
</form>

Nur nach load stehen die Artikel als Ergebnismenge bereit - CMS:RESULT_START läuft über sie wie nach einem CMS:SELECT. Nach add, update und update_addon ist $set aktuell, für die Liste folgt deshalb ein zweiter Aufruf mit load (Beispiel oben). Ohne gültiges Token aus CMS:USER_TOKEN ändert eine schreibende Funktion nichts. Ein „In den Warenkorb“-Formular in einer Artikelliste:

<form method="post" action="/0,u_basket">
  (CMS:USER_TOKEN)
  <input type="hidden" name="f" value="add">
  <button name="items[]" value="(CMS:TEXT record_id)">In den Warenkorb</button>
</form>

Parameter im Einzelnen

function

Darf ohne Schlüssel stehen:

(CMS:USER_BASKET load)                       Inhalt lesen, Artikel als Ergebnismenge
(CMS:USER_BASKET add variable=items)         Ids aus $_REQUEST['items'] hinzufügen
(CMS:USER_BASKET update variable=items)      Mengen setzen (0 entfernt)
(CMS:USER_BASKET update_addon basket_addon="{$note}")

overwrite

Bei add: Menge setzen statt addieren:

(CMS:USER_BASKET add variable=items overwrite=true)

Mit items[5]=2 liegt Artikel 5 danach genau 2-mal im Korb, auch wenn er schon drin war.

category

Mehrere Warenkörbe je Session, z. B. Merkliste neben dem Einkaufskorb:

(CMS:USER_BASKET add variable=items category=1)
(CMS:USER_BASKET load category=1)

container

Beschränkt den Warenkorb auf bestimmte Inhaltsbereiche (Namen oder Ids, kommasepariert). Ohne Angabe sind veröffentlichte Datensätze aus Bereichen vom Typ „record“ oder „ugc“ erlaubt, nie Profile. Die Prüfung gilt auch beim Lesen: Artikel außerhalb der Bereiche erscheinen weder in $set['basket'] noch in der Ergebnismenge.

(CMS:USER_BASKET add variable=items container=produkte,zubehoer)
(CMS:USER_BASKET load container=produkte,zubehoer)

variable

Name des Request-Parameters mit den Artikel-Ids - als Liste (items[]=5, Menge 1 je Nennung) oder mit Mengen (items[5]=2):

<input type="hidden" name="cart[<?php echo $id; ?>]" value="1">
(CMS:USER_BASKET add variable=cart)

duration

Tage, die der Warenkorb ohne Änderung erhalten bleibt (Standard 30):

(CMS:USER_BASKET add variable=items duration=7)

basket_addon

Freitext zur Kategorie ablegen (Lieferhinweis, Gutscheincode, serialisierte Daten):

(CMS:USER_BASKET update_addon basket_addon="{$_POST['note']}")
<?php echo htmlspecialchars($set['basket_addon']); ?>

← Übersicht

Stand: camindo CMS 9.1.3