Neu Preis von anderer Kundengruppe im Shop anzeigen

Dull

Aktives Mitglied
14. Juli 2014
67
1
Pfarrkirchen
Moin,

ich stehe gerade vor einem Problem der Preisdarstellung im Shop Template und hoffe jemand kann mir auf die Sprünge helfen.

Ich würde gerne hinbekommen, das neben dem gültigen Standardpreis ein weiterer Preis einer anderen Kundengruppe angzeigt wird. Z. B. ein Gast sieht den normalen Brutto-Verkaufspreis der eingestellten Standard-Kundengruppe. Daneben würde ich dem Gast gerne zeigen, welchen Preis er erhalten würde, wenn er sich z. B. als Händler registrieren würde (also einer anderen Kundengruppe beitritt). Das Ganze soll also nicht anhand von Rabatten oder einer universellen Kalkulation abgebildet werden, sondern anhand der in der Wawi hinterlegten Kundengruppenspezifischen Preise.

Im Template finde ich zur Preisdarstellung leider nur folgende Angabe für den Standardfall:
Code:
{$Artikel->cLocalizedVPE[$NettoPreise]}
Für Spezialpreise wird das Ganze anhand des alten VK Localized ausgegeben, z. B.:
Code:
{$Artikel->Preise->alterVKLocalized[$NettoPreise]}
Wie komme ich denn da zu den Preisen der Kundengruppen hin? :eek:
 

Dull

Aktives Mitglied
14. Juli 2014
67
1
Pfarrkirchen
Habe mir jetzt mal sämtliche SMARTY Variablen angesehen und leider keine versteckten Kudengruppenspezifischen Werte auf der Produktdetailseite entdeckt. Wenn $Artikel->Preise->kKundengruppen z. B. mit 2 angegeben ist, sind alle enthaltenen Werte und Preise von $Artikel->Preise auf genau diese Kundengruppe zugeschnitten.

Sehe ich das richtig dass die Kundengruppe per Session definiert wird? Bzw. könnte man die Kundengruppe nur für z. B. eine Funktion unabhängig der Session-Kundengruppe eigens definieren?
 

FPrüfer

Moderator
Mitarbeiter
19. Februar 2016
1.109
238
Halle
Hallo,
standardmäßig stellt der Shop nur die Preise für die aktuelle Kundengruppe zur Verfügung. Das ist entweder die Standardkundengruppe, wenn der Nutzer nicht angemeldet ist, bzw. die hinterlegte Kundengruppe eines eingeloggten Nutzers.
Preise für andere Kundengruppe müssen über ein Plugin oder direkt im Template explizit ermittelt werden. Dafür kann die Klasse Preise in /classes/class.JTL-Shop.Preise.php verwendet werden.
Dazu wird der Konstruktor mit Angabe der gewünschten Kundengruppe und der Artikel-ID aufgerufen.
PHP:
$otherPrices     = new Preise($customerGroupID, (int)$Artikel->kArtikel);
$otherNettoPrice = $otherPrices->alterVKLocalized[$NettoPreise];
Hierbei kommt man aber nicht umhin das in einem Plugin zu verarbeiten oder eine eigene Smarty-Funktion dafür zu schreiben.
 
  • Gefällt mir
Reaktionen: Dull

Dull

Aktives Mitglied
14. Juli 2014
67
1
Pfarrkirchen
Ah, super! Danke für den Tipp :D
Mal sehen ob sich da was machen lässt. Sobald ich da ne fertige Lösung habe post ichs gerne für alle anderen.

Beim Shop5 hat sich die Klasse ein bisschen verschoben in den Ordner includes/src/Catalog/Product/Preise.php ^^
 

Dull

Aktives Mitglied
14. Juli 2014
67
1
Pfarrkirchen
Also es sollte wiefolgt funktionieren (zumindest für Shop5 beta3):

Zuerst muss wie von FPrüfer beschrieben eine eigene Funktion erstellt werden. Die sieht dann in der functions.php wiefolgt aus:
PHP:
$smarty->registerPlugin('function', 'KGPreis', 'KGPreis');

function KGPreis($customerGroupID, $Artikel)
{
    $otherPrices = new Preise($customerGroupID, (int)$Artikel->kArtikel);
    return $otherPrices->fVKNetto;
};
Damit kann man den gewünschten Preis dann einfach an der Stelle im Template bzw. der Produktdetailseite aufrufen wo er benötigt wird, wobei die erste Zahl nach der runden Klammer die Kundengruppe ist, die man abbilden möchte (laut MySQL-Datenbank):
PHP:
{KGPreis(9, $Artikel)}
Für Bruttopreise einfach fVKBrutto in der Funktion nutzen
 

FPrüfer

Moderator
Mitarbeiter
19. Februar 2016
1.109
238
Halle
Beim Shop5 hat sich die Klasse ein bisschen verschoben in den Ordner includes/src/Catalog/Product/Preise.php ^^
In Shop5 muss man sich um den konkreten Pfad nicht mehr so sorgen. Dort kann man die Klasse über Ihren Namespace per use einbinden und der PSR-Autoloader macht dann den Rest... ;)
PHP:
use JTL\Catalog\Product\Preise;
 
  • Gefällt mir
Reaktionen: Dull