Hier kam schon öfter die Frage auf, wie man einen Gratisartikel auf die Anzahl 1 begrenzen kann. Für eine Osteraktion (Osterpostkartenset gratis bei jeder Bestellung) brauchte ich genau das .Ich habe ein kurzes updatesicheres Script geschrieben, bei dem alle Artikel deren Artikelnummer mit "-1x" enden (zB. Artikel-1x) auf die Menge 1 reduziert werden. Funktioniert für meine Zwecke prima.
Ich finde die Methode einfache Dinge über die Artikelnummer zu lösen sexy, weil wenig Anpassungen nötig sind und die Funktionsweise einfach ist.
Man könnte noch einen Mindesteinkaufswert für jeden Gratisartikel hinterlegen (zB. Artikel-10.00-1x). Dann muss das Skript nur noch so angepasst werden, dass die Menge erst dann reduziert bzw. der Artikel dann gelöscht wird, wenn die Summe der Gratisartikel die Warenkorbsumme übersteigt. Dann können je nach Einkaufswert auch mehrere Gratisartikel gewählt werden und der Kunde wird angeregt, einen höheren Einkaufswert zu erreichen. Das Löschen von Gratisartikeln muss in dem Fall dann aber auch zB. als Errormassage dem Kunden kommuniziert werden. Das habe ich in meiner einfachen Version erst einmal weggelassen, weil ich es über den Artikeltext kommuniziere.
Ich habe es nicht in die cart_actions sondern in die application_top_end gepackt, weil ich ein firmeninternes Modul nutze, dass den Warenkorb alternativ über einen separaten Weg füllt. Über die application_top_end ist man auf jeden Fall unabhängig von eventuell anderen installierten Modulen.
Lange Rede, jetzt die kleine updatesichere Anpassung:
Erzeuge unter /includes/extra/application_top/application_top_end/ die Datei p3e_1x_products.php mit folgendem Inhalt:
<?php/*
/includes/extra/application_top/application_top_end/p3e_1x_products.php
Author: p3e 13.03.2021
Version: 1.0
Usage: Article numbers ending with "-1x" (e.g. article-1x) are reduced to a single quantity in the shopping basket.
*/if (isset ($_SESSION['cart'])) { $products = $_SESSION['cart']->get_products(); $sizeof_products = sizeof($products); for ($i = 0, $n = $sizeof_products; $i < $n; $i++) { if (substr($products[$i]['model'],-3)=='-1x' && (int
)$products[$i]['qty'] != 1) { $_SESSION['cart']->add_cart((int
)$products[$i]['id'], 1, '', false); } }} Alle Artikel, die in der Artikelnummer mit "-1x" enden, können dann nur einmal im Warenkorb platziert werden. Es können beliebig viele Artikel mit dieser Eigenschaft angelegt werden.
Linkback: https://www.modified-shop.org/forum/index.php?topic=41738.0