E-commerce - sprzedaż online
Ogólne zasady rabatów i cen produktów w systemie Actualizer CMS:
- Cena produktu (wg grupy dostępu)
Nazwa pola zawierającą cenę domyślną jest zdefiniowana w ustawieniach systemu w zmiennej (typu hasz) "scart_fields" (prefix "scart" jest domyślny - można definiować kilka zestawów ustawień w ramach jednej instalacji) wg zasady:
price => nazwa_pola_z_ceną
przykład:
Dla poszczególnych grup użytkowników można dodatkowo definiować osobne pola zawierające cenę.
Pola definiujemy w zmiennej typu hasz "scart_price_fields" - wg zasady:
nr_grupy_użytkowników => nazwa pola
przykład:
Cena produktu może zależeć również od wybranej opcji produktu - Rabaty na produkt (wg grupy dostępu)
pole w bazie produktowej zawierające wartość procentową rabatu, dla poszczególnych grup użytkowników można definiować osobne pola.
Pole rabatu podobnie jak dla pole ceny określone jest w zmiennej systemowej scart_fields wg zasady:
rabat => nazwa_pola_z_ceną
Podobnie jak dla pól określających cenę, definiuje się nazwy pól z rabatami dla poszczególnych grup użytkowników. W zmiennej scart_rabat_fields definiujemy wg zasady:
nr_grupy_użytkowników => nazwa pola z rabatem procentowym - Rabaty użytkowników
Stały rabat procentowy na określoną grupę produktów przypisany do danego użytkownika - definiowane w opcji Narzędzia > Sprzedaż on-line > Rabaty dla użytkowników.
Rabat taki jest stosowany jeśli jest wyższy niż np. rabat przypisany do produktu (nie jest sumowany)
Użytkownik może mieć również zdefiniowany dodatkowy rabat procentowy na wszystkie produkty, w polu w bazie użytkowników (o nazwie zdefiniowanej w zmiennej scart_irabat_field). Rabat ten jest sumowany z innymi rabatami. - Widełki ilościowe
Cena produktu w koszyku może zależeć od ilości dodanych produktów - można to zdefiniować za pomocą dodatkowego pola w bazie produktowej zawierającego tzw widełki cenowe - na zasadzie:
[minimalna ilość produktu w koszyku] => Cena
Definiowanie pola w bazie zawierającego widełki cenowe:
zasada definiowania widełek cenowych (pole typu hash): - Rabaty warunkowe
Naliczane tylko w koszyku, zależne od warunku rabatu, np:
- ilości określonych produktów w koszyku
- ilości produktów w koszyku posiadające określoną cechę
- kuponu rabatowego dołączonego do koszyka
Rabaty warunkowe mogą się sumować lub zastępować mniej korzystne rabaty w zależności od ustawienia danego rabatu.
Rabatom warunkowym można zdefiniować priorytet - kolejność sprawdzania, okres ważności, prawa dostępu.
Rabat może być kwotowy lub procentowy, naliczany do zamówienia, wybranych produktów w koszyku lub na koszty dostawy.
więcej o rabatach warunkowych - Kupony rabatowe
Kupon może być jedno lub wielokrotnego użytku. W systemie definiuje się grupy kuponów o określonej nazwie (identyfikatorze) oraz ilości - system automatycznie generuje kupony w definiowanej bazie "coupons".
Kupon w najprostszej postaci posiada wartość kwotową i tak przygotowany wystarczy do naliczenia kwotowego rabatu stałej wysokości. (wartość kuponu pomniejsza wartość towarów).
Kupon może posiadać zerową wartość kwotową - takie ustawienie ma sens jeśli "uruchamia" on rabat warunkowy - tj w warunku zastosowania rabatu warunkowego możemy użyć formuły $this->order['coupon']['nazwa_grupy_kuponów'] jako warunku zastosowania danego rabatu.
więcej o kuponach rabatowych
Dostępność cen z uwzględnieniem rabatów w szablonach
Moduły standardowe takie jak:- xbase
- wbase
- dbox
- sql_query

Co skutkuje tym, że do pól pobieranych rekordów dodawane są pola wyliczające rzeczywistą cenę sprzedaży (bez uwzględnienia jedynie rabatów warunkowych, które zależne są od zawartości koszyka), opis pól
- _discount - rabat prcentowy
- _price_nd - cena bez rabatu
- _price_nd_vat - cena bez rabatu + vat jeśli operujemy na cenach netto
- _price - cena z uwzględnieniem rabatu
- _price_vat - cena z uwzględnieniem rabatu + vat jeśli operujemy na cenach netto
Waluty
W opcji Administracja > Waluty należy zdefiniować walutę lub wiele walut sprzedaży. Waluta w której następuje definiowanie cen to ta która ma kurs równy 1.0000
Dla poszczególnych wersji językowych należy zdefiniować domyślną walutę wpisując kod ISO:

Waluta wybierana jest wg priorytetów:
- kod ISO waluty, w polu o nazwie "currency", w bazie użytkowników, zgodny z kodem ISO waluty, ustawia daną walutę jako aktywną dla danego użytkownika
- kod kraju, w polu o nazwie "sh_country", w bazie użytkowników, zgodny z kodem kraju zdefiniowanym dla danej waluty, ustawia daną walutę jako aktywną dla danego użytkownika
- kod ISO waluty w aktywnej wersji językowej, ustawia daną walutę jako domyślną
Aby pokazać w szablonie cenę produktu w danej walucie stosujemy modyfikator "cc", przykład:
- {$item._price|cc} (zwraca kwotę sformatowaną, z przecinkiem jako separatorem dziesiętnym oraz znakiem waluty)
- {$item._price|cc:0:0} (zwraca kwotę niesformatowaną, z kropką jako separatorem dziesiętnym bez znaku waluty)
modyfikator przeliczy cenę na wartość w bieżącej walucie.
aby dodać do wartości znak waluty można zastosować funkcję smarty "cc_sign"
- {$item._price}{cc_sign}
aby dodać znak wktywnej waluty
- {$item._price}{cc_sign c="EUR"}
aby dodać znak waluty zdefiniowanej jako parametr "c"
VAT
Domyślnie cenę produktu/usługi definiuje się w systemie jako cenę brutto - w tej opcji cenę netto oraz stawkę VAT można zdefiniować w systemie jako pola dodatkowe - informacyjnie eksponowane w sklepie.Jeśli cena bazowa produktu/usługi ma być ceną netto, do której system ma doliczyć stawkę vat, wówczas należy:
- w ustawieniach systemu zaznaczyć (wartość 1) zmienną typu checkbox o nazwie "scart_calcVat" - przeliczaj Vat
- w zmiennej scart_fields określić które pole w bazie produktów zawiera stawkę vat:
wówczas w szablonie cena brutto będzie dostępna w: {$item._price_vat}, natomist w {$item._price} będzie cena netto
Moduł sprzedaży xCart
więcej informacji o ustawieniach modułu sprzedażyPrzykłady szablonów smarty
- lista produktów - cena, cena przekreślona, rabat procentowy, waluta
http://demo2.heuristic.com.pl/pl/sklep/lampy/lampy_wiszace - waluta PLN
http://demo2.heuristic.com.pl/en/sklep/lampy/lampy_wiszace - waluta EUR (kurs 4.00){if $item._price < $item._price_nd}
<span class="cena"><del>{$item._price_nd|cc}</del></span>
<span class="cenapromo rounded-small">{$item._price|cc}<br/>rabat: {$item._discount|round}%</span>
{else}
<span class="cena rounded-small">{$item._price|cc}</span>
{/if} - produkt - opcje produktu + link dodaj do koszyka z opcjami, cena wy wybranej opcji
http://demo2.heuristic.com.pl/sklep/lampy/lampy_wiszace/prd,massive-562793310,rid,1881.html
<form action="/koszyk" method="get">
<input type="hidden" name="add[{$item.id.value}]" value="1" />
{capture name=doptions}{strip}
{section name=foo start=1 loop=4 step=1}
{assign var="i" value=$smarty.section.foo.index}
{assign var="of" value="dopt`$i`"}
{assign var="lf" value="label_dopt`$i`"}
{if $item.$of.value|@count > 0 && $item.$of.value.0.0}
{$item.$lf.value}:<br /><select id="option{$i}" name="option{$i}[{$item.id.value}]" class="product-option-select">
{foreach key=k item=i from=$item.$of.value}
<option value="{$k}" title="{$i.1|cc:0:0}">{$i.0}{if $i.1 > 0} (+ {$i.1|cc}){/if}</option>
{/foreach}
</select>
<br /><br />
{/if}
{/section}
{/strip}{/capture}
{if $smarty.capture.doptions != ''}
<fieldset><legend>Opcje</legend>{$smarty.capture.doptions}</fieldset>
{/if}
<div class="paddcart"><input type="image" src="/{$set.sub_root_path}img/modern_bgg/btn_add_cart.gif" alt="dodaj" /></div>
</form>
<script type="text/javascript">
var produktCena = {$item._price.value|cc:0:0};
function number_format(a, b, c, d) {
if (b == null) b = 2;
if (c == null) c = ',';
if (d == null) d = ' ';
a = Math.round(a * Math.pow(10, b)) / Math.pow(10, b);
e = a + '';
f = e.split('.');
if (!f[0]) {
f[0] = '0';
}
if (!f[1]) {
f[1] = '';
}
if (f[1].length < b) {
g = f[1];
for (i=f[1].length + 1; i <= b; i++) {
g += '0';
}
f[1] = g;
}
if(d != '' && f[0].length > 3) {
h = f[0];
f[0] = '';
for(j = 3; j < h.length; j+=3) {
i = h.slice(h.length - j, h.length - j + 3);
f[0] = d + i + f[0] + '';
}
j = h.substr(0, (h.length % 3 == 0) ? 3 : (h.length % 3));
f[0] = j + f[0];
}
c = (b <= 0) ? '' : c;
return f[0] + c + f[1];
}
$(function() {
$('select.product-option-select').change(function(){
produktCalcCena = produktCena;
$('select.product-option-select').each(function(){
produktCalcCena += parseFloat(this.options[this.selectedIndex].title);
});
$('#pcena').html(number_format(produktCalcCena));
});
});
</script>
<div class="cena-brutto">cena brutto:{if $item._price_nd.value > $item._price.value}<del>{$item._price_nd.value|cc}</del> {/if} <span id="pcena">{$item._price.value|cc}</span></div>