Neu Gratis Geschenk Übersicht?

edding18

Gut bekanntes Mitglied
10. August 2018
139
19
Gibt es für die Gratis-Geschenk-Funktionalität auch eine Art "Übersicht" also welches Geschenk ab Wann verfügbar ist?

Standardmäßig werden ja nur die Geschenke angezeigt, welche auch zum jeweiligen Warenwert passen - wo bleibt die Motivation für den Kunden mehr in den Warenkorb zu legen?

Hier müsste man zumindest sehen, was es denn potentiell gibt ab Betrag X?

Hat das jemand schon gelöst?

VG
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.385
263
In der Inhalstverwaltung im Admin eine eigene Seite anlegen mit Spezialtyp "Gratis Geschenk". Wenn die generell sichtbar sein soll, dann einfach in eine sichtbare Linkgruppe schieben. Ansonsten unter hidden anlegen und irgendwo manuell auf diese verlinken.
 

edding18

Gut bekanntes Mitglied
10. August 2018
139
19
Ja... das ist dann eine manuelle Pflege. Ich habe mir den PHP-Code angeschaut, wie der JTL- Shop sich das Array für die Gratis-Artikel zieht:

warenkorb_inc.php --> dort dann die Funktion function gibGratisGeschenke() - dort wird im SQL code der Warenwert abgeglichen:

...
AND CAST(tartikelattribut.cWert AS DECIMAL) <= " .
$_SESSION['Warenkorb']->gibGesamtsummeWarenExt([C_WARENKORBPOS_TYP_ARTIKEL], true)
...

Wenn man das entsprechend entfernen / auskommentieren würde, erhält man ein array mit gar allen Gratis-Artikeln. In der Ausgabe würde ich dann die Artikel, die noch nicht verfügbar sind, da der Warenwert zu klein ist, grafisch etwas anders ausgeben (ausgrauen etc.) und die Funktionalität (input, radio button etc. entfernen) und eine Art Info-Text drüberlegen "Erst verfügbar ab Warenwert X Euro". Die zugrundeliegenden Infos (Attribute) sind ja alle mehr oder weniger in den Objekten drin (z.B. $oArtikelGeschenk_arr[3]->cBestellwert enthält bspws. "29,00 &euro;").

Wenn jemand dann versuchen würde die ausgegrauten/inaktiven Artikel trotzdem "anklickbar" zu machen bzw. versuchen würde diese Artikel in den Warenkorb zu "schummeln", wird das durch den JTL-Shop ja automatisch abgefangen, da dort ja bei jedem hinzugefügten Gratis-Artikel nochmals gecheckt wird, ob es auch legitim ist, sprich der Warenkorbwert zu dem hinterlegten Attributwert passt. Wird ja in der warenkorb.php in Zeile 89 so nett mit "// Pruefen ob der Artikel wirklich ein Gratis Geschenk ist" kommentiert :)

Das wäre dann meines Erachtens eine Lösung an der richtigen Stelle!

Nur eigtl. wäre JTL selber hier gefragt, so eine Lösung umzusetzen.

VG
 

edding18

Gut bekanntes Mitglied
10. August 2018
139
19
Okay - hatte ich zu schnell gelesen!

Hab's gerade getestet, bei uns werden nur 10 Stück angezeigt, obwohl wir 12 Gratis-Artikel zur Auswahl haben.

Steckt wohl irgendwo im Quellcode ein Limit drin!? Weiß das jemand zufällig, wo das sein könnte?

Nichtsdestotrotz halte ich meine vorgeschlagene Modifikation auf der Warenkorbseite selbst für sehr sinnvoll, da das ja die Stelle ist, an der Upsells passieren können!

UPDATE: Gefunden!

Unter der Einstellungs ID: 1145 sind die Anzahl der Gratis-Artikel für die Übersichtsseite zu finden.

VG
 
Zuletzt bearbeitet:

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
6.693
1.610
Berlin
Auch dafür gibt es eine Lösung :D

1575026791551.png

und wenn man sich eine kleine smarty funktion in seiner functions.php einfügt, dann kann man das auch an jeder x beliebigen Stelle anzeigen lassen, ich habe das
in verschiedenen Varianten sowie in Verbindung mit dem Dropper als Modales PopUp durch
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
6.693
1.610
Berlin
Hier mal ein Beispiel wie das in meiner functions dann aussieht, um es über smarty dann abrufbar zu machen, denn wir sollen ja nicht am Core rumspielen :):

Code:
$smarty->registerPlugin ( 'function', 'css_gib_gratis_geschenke', 'cssGibGratisGeschenke' );

function cssGibGratisGeschenke($params, &$smarty) {
    $nLimit             = (isset($params['limit']))
        ? (int)$params['limit']
        : 100;

    $cAssign             = (isset($params['assign']))
        ? $params['assign']
        : '';
        
    $nWert             = (isset($params['wert']))
        ? (int) $params['wert']
        :  9999999;
    
    if(isset($_SESSION['Warenkorb'])) {
        $wkWert = $_SESSION['Warenkorb']->gibGesamtsummeWarenExt([C_WARENKORBPOS_TYP_ARTIKEL], true);
    }
        
    $Einstellungen = Shop::getSettings([
        CONF_GLOBAL,
        CONF_RSS,
        CONF_KAUFABWICKLUNG,
        CONF_KUNDEN,
        CONF_ARTIKELUEBERSICHT,
        CONF_SONSTIGES
    ]);
    /** @var array('Warenkorb') $_SESSION['Warenkorb'] */
    $oArtikelGeschenke_arr = [ ];

    $cSQLSort = ' ORDER BY CAST(tartikelattribut.cWert AS DECIMAL) DESC';
        if ($Einstellungen['sonstiges']['sonstiges_gratisgeschenk_sortierung'] === 'N') {
            $cSQLSort = ' ORDER BY tartikel.cName';
        } elseif ($Einstellungen['sonstiges']['sonstiges_gratisgeschenk_sortierung'] === 'L') {
            $cSQLSort = ' ORDER BY tartikel.fLagerbestand DESC';
        }
        
        $query = "SELECT tartikel.kArtikel, tartikelattribut.cWert
                FROM tartikel
                JOIN tartikelattribut
                    ON tartikelattribut.kArtikel = tartikel.kArtikel
                WHERE (tartikel.fLagerbestand > 0 ||
                      (tartikel.fLagerbestand <= 0 &&
                      (tartikel.cLagerBeachten = 'N' || tartikel.cLagerKleinerNull = 'Y')))
                    AND tartikelattribut.cName = '" . FKT_ATTRIBUT_GRATISGESCHENK . "'
                    AND CAST(tartikelattribut.cWert AS DECIMAL) <= " . $nWert . $cSQLSort . " LIMIT ".$nLimit;
        $oArtikelGeschenkeTMP_arr = \Shop::DB ()->query ( $query, 2 );
        
        if (is_array ( $oArtikelGeschenkeTMP_arr ) && count ( $oArtikelGeschenkeTMP_arr ) > 0) {
            foreach ( $oArtikelGeschenkeTMP_arr as $i => $oArtikelGeschenkeTMP ) {
                $oArtikel = new Artikel ();
                $oArtikel->fuelleArtikel ( $oArtikelGeschenkeTMP->kArtikel, Artikel::getDefaultOptions () );
                $oArtikel->cBestellwert = gibPreisStringLocalized ( (float) $oArtikelGeschenkeTMP->cWert );
                
                if ($oArtikel->kArtikel > 0 && ($oArtikel->kEigenschaftKombi > 0 || ! is_array ( $oArtikel->Variationen ) || count ( $oArtikel->Variationen ) === 0)) {
                    $oArtikel->gratis_ab = (int) $oArtikelGeschenkeTMP->cWert;
                    if( (int) $oArtikelGeschenkeTMP->cWert <= (int) $wkWert)  {
                        $oArtikel->canGetFreeGift= true;
                    }    else {
                        $oArtikel->canGetFreeGift= false;
                    }
                    $oArtikelGeschenke_arr[] = $oArtikel;
                }
            }
        }
        
    if(!empty($cAssign)) {
        $smarty->assign("cssGratisartikel",$oArtikelGeschenke_arr);
        $output = $smarty->fetch("snippets/cssUmsetzung/cssGratisArtikel.tpl");
        $smarty->assign($cAssign,$output);
    } else {
        return $output;
    }
}
 

edding18

Gut bekanntes Mitglied
10. August 2018
139
19
Wieder was gelernt - wir sind ja nur Shop-Betreiber und keine Programmierprofis. Tja, wenn ich jetzt wüsste, wie man mit der Programmierung von nem Plugin startet... da sind manchmal 2 Zeilen Code in ner PHP-Datei zu ändern einfacher. Natürlich wird dann jedes Update zu einer Herausforderung :)

Für meine skizzierte Funktionalität im Warenkorb selbst mit ausgegrauten Artikeln, müsstest Du dein Script dann noch so anpassen, dass die bereits verfügbaren Artikel rausgefiltert werden - also nur noch Artikel angezeigt werden, die bei einem höheren Warenwert als dem aktuellen angezeigt werden.

Und dann unterhalb der aktuellen Auswahlmöglichkeit im Warenkorb anzeigen lassen bspws.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
6.693
1.610
Berlin
Über eine Kleine Anpassung wäre das sofort und optional möglich, aber wenn man das möchte könnte man das dann auch über smarty direkt im Template regeln.
Niemand wird 300 Gratisartikel haben, von daher ist der SQL Query hier erst einmal wurscht.
 

Thorsten555

Neues Mitglied
10. September 2019
4
1
Uns ist auch aufgefallen, dass es gerade bei Gratiszugaben und Geschenken die Funktionalität eingeschränkt war.
Die Vorgabe durch unseren Kunden war, bei Bestellung von 5 Artikeln aus einer Kategorie einen bestimmten Gratisartikel direkt in den Warenkorb zu legen.
Nach intensiver und leider erfolgloser Suche im Netz haben wir uns entschlossen selber eine Lösung zu schreiben.
Herausgekommen ist ein schönes Plug-In.
Vielleicht ist das ja auch für euch die richtige Lösung.
https://shop.techneo.de/Plugin-Aktion-fuer-Artikel-und-Kategorie
 
Zuletzt bearbeitet:

edding18

Gut bekanntes Mitglied
10. August 2018
139
19
Ich habe ne custom-Lösung gebaut indem in der warenkorb_inc.php die Funktion gibGratisGeschenke() gar alle Gratis-Artikel nach aufsteigendem Warenwert ausgibt. (Hab dazu den SQL-Code angepasst)

Beim Smarty-Template wird dann bei der Ausgabe der Gratis-Artikel abgeglichen, ob sie aktiv dargestellt werden (weil Warenwert überschritten) oder eben passiv/ausgegraut, weil der Warenkorbwert noch zu gering. Fährt man mit der Maus dann über einen ausgegrauten Gratis-Artikel, so wird per Hover-Effekt eingeblendet, ab wie viel € Warenwert der Artikel als Geschenk gewählt werden kann und wie viel € Differenz zum aktuellen Warenwert das ist ("Bitte lege noch Artikel im Wert von XX,XX € in den Warenkorb, um diesen Artikel auswählen zu können).

Damit werden die Kunden jetzt hoffentlich motiviert :)