Events
Evo's events provide a simple observer pattern implementation, allowing you to subscribe and listen for various events that occur within your application. Using events, it is convenient to manage additional sCommerce parameters. Below is a list of reserved events.
Enhancement of interface management capabilities
sCommerceManagerAddTabEvent
Event::listen('evolution.sCommerceManagerAddTabEvent', function($params) {
dd($params);
});
Product manipulation
sCommerceAfterProductSave
Event::listen('evolution.sCommerceAfterProductSave', function($params) {
dd($params);
});
sCommerceAfterProductDuplicate
Event::listen('evolution.sCommerceAfterProductDuplicate', function($params) {
dd($params);
});
Cart pricing
By default, sCommerce uses the historical retail price resolver:
price_specialis used when it is greater than0and lower thanprice_regular;- otherwise
price_regularis used.
Wholesale pricing is controlled on the server side, not from frontend request data. This keeps cart and checkout totals protected from client-side manipulation.
Session price mode
Use the sCart facade to switch the current customer session to wholesale pricing:
use Seiger\sCommerce\Facades\sCart;
sCart::setPriceMode('wholesale');
Reset the session back to default retail pricing:
sCart::clearPriceMode();
Wholesale prices use the same rule as retail prices:
price_opt_specialis used when it is greater than0and lower thanprice_opt_regular;- otherwise
price_opt_regularis used.
sCommerceResolveProductPriceMode
Use this event to override the session price mode for a specific product.
use Illuminate\Support\Facades\Event;
Event::listen('evolution.sCommerceResolveProductPriceMode', function(array $payload) {
$product = $payload['product'];
if ((int)$product->id === 123) {
return 'wholesale';
}
return null;
});
The payload contains:
product: current product model;optionId: cart option ID;priceMode: resolved session mode before product-level overrides.
sCommerceResolveProductPrice
Use this event when a project needs to set a fully custom price for a specific product.
use Illuminate\Support\Facades\Event;
Event::listen('evolution.sCommerceResolveProductPrice', function(array $payload) {
$product = $payload['product'];
if ((int)$product->id === 123) {
return [
'priceAsFloat' => 77.50,
'oldPriceAsFloat' => 100.00,
];
}
return null;
});
The listener can return either a numeric price or an array with any of these keys:
priceModepricepriceAsFloatoldPriceoldPriceAsFloat
If formatted price or oldPrice values are omitted, sCommerce formats them from the numeric values.