Naam: Pop-a-Shop
Functie: (Web)shop/voorraadbeheer/klantenservice
Taal: PHP HTML CSS Javascript
Database: MySQL (communicatie via PDO)
Gebruikte platformen: W3.CSS en tinyMCE
Het waarom:
Ik heb voor de lol een webwinkel in elkaar gezet. De webwinkel is gemaakt om vooral mezelf verder te ontwikkelen in PHP 7 en MySQL. Het hele pakket maakt gebruik van PDO met prepared statements En de views zijn HTML 5 en CSS met hier en daar wat javascript.
Screenshot:
Feature beschrijving:
De software bied de gebruiker de mogelijkheid en om een webshop te beginnen waarin oneindig veel categorieën en subcategorieën kunnen worden gemaakt die gevuld kunnen worden met producten. Aan deze producten kunnen plaatjes en verschillende beschrijvende eigenschappen worden toegevoegd. Ook is het voor ingelogde klanten mogelijk een rating aan de producten te geven, een product review te plaatsen.
Het pakket bied de mogelijkheid om via een scrollende banner of gepinde producten op de frontpage en per hoofd- of subcategorie aan promoties te doen. Daarnaast kunnen kortingscodes worden aangemaakt die voor een bepaalde periode geldig zijn en voor of een vast bedrag of percentage korting verzilverd kunnen worden. Daarnaast kan er een tekst op de frontpage geplaatst worden en zit er een mogelijkheid in om naar klanten die dit toestaan een opgemaakte nieuwsbrief te versturen.
Ook qua logistiek heb ik een paar leuke functies ingebouwd. Zo kan je met dit pakket je hele voorraad beheren en weet de software aan de hand van het serienummer van het product aan welke klant een product verkocht is of op welk schap het product ligt. Het houd op die manier keurig de voorraad bij en laat dit ook bij het product zien als dit direct leverbaar is.
Van iedere bestelling genereert het een 'pakbon' en als alle producten van die pakbon aanwezig zijn kan een bestelling 'geraapt' worden. Bij iedere refresh van het bestellingen overzicht checkt hij openieuw of eventueel nog niet complete bestellingen inmiddels compleet zijn en 'geraapt' kunnen worden. Bij het rapen van een bestelling vraagt hij om de serienummers zodat het voorraadbeheer en de service module weten waar een product aan gekoppeld wordt.
Der service module bestaat per klant uit een dashboard waar problemen aangemaakt kunnen worden. Aan deze problemen kunnen calls worden toegevoegd (Verslagen van (telefonische/mail/balie) gesprekken met klanten en eventuele toezeggingen. Er kunnen producten voor testen in worden genomen en producten worden gecrediteerd of omgeruild. Hier kan dan aangegeven worden of een product cash is gecrediteerd of dat hij op de lijst voor de boekhouding moet komen met hierbij dan het rekening nummer van de klant.
Alle wijzigingen uit de service module kunnen worden na bevestiging meteen doorgevoerd in het voorraadbeheer zodat die altijd accuraat is.
Ook bied het de mogelijkheid om verschillende soorten gebruikers te hebben. Klanten, verkopers, servicemedewerkers, inkopers, logistiek medewerker, boekhouding en eigenaar. Deze kunnen dan bij bepaalde modules.
Er is een functionele winkelwagen en klanten kunnen eerdere bestellingen zien. Voor de betalingen heb ik een integratie met Mollie.
Wat nog op het todo/wens lijstje staat:
- De mogelijkheid om vanuit het pakket de kleuren te veranderen.
- Ondersteuning inbouwen voor de abonnement dienstverlening van Mollie
- Ondersteuning voor creditering van betalingen gedaan met Mollie
Wat heb ik tijdens dit project geleerd:
Ik heb met dit project een hoop geleerd over classes en het op zo'n manier schrijven van functies dat ze makkelijk door het project heen herbruikbaar zijn. Ik merk wel dat ik voor heel veel dingen een switch heb gebruikt. Dit zorgt ervoor dat alles vanaf index.php werkt en aangeroepen wordt. Ik weet alleen achteraf niet of dit de meest elegante oplossing is.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
| <?php
switch($doAction){
case 'register':
include("register.php");
break;
case 'login':
include("login.php");
break;
case 'logout':
include("logout.php");
$Page->addToBody(imageSlider().showPromotions('0', '3'));
break;
case 'showCat':
include("category.php");
break;
case 'showCart':
$Page->changePageTitle("Winkelwagen");
$Page->addToBody($myCart->showList(FALSE));
break;
case 'showProduct':
include("product.php");
break;
case 'placeReview':
include($Page->addToBody(placeReview($_GET['pId'], $_POST['review'], $_POST['score']))."product.php");
break;
case 'placeOrder':
include ("placeOrder.php");
break;
case 'showSearch':
$Page->addToBody(search(1));
break;
case 'showSearchAll':
if($User->isAdmin() OR $User->canEditProducts()){
$Page->addToBody(search(0));
} else {
$Page->addToBody("<div class=\"w3-container w3-red\"><span onclick=\"this.parentElement.style.display='none'\" class=\"w3-closebtn\">×</span><h3>Fout!</h3><p>Uw account besschikt over onvoldoende rechten om inactieve producten te zoeken.</p></div><br>".search(1));
}
break;
case 'manageProduct':
include 'manageProduct.php';
break;
case 'admin':
include 'admin.php';
break;
case 'addDiscountCoupon':
$myCart->addDiscountCoupon($_POST['discountCoupon']);
$Page->changePageTitle("Winkelwagen");
$Page->addToBody($myCart->showList(FALSE));
break;
case 'doPromotions':
include 'promotions.php';
break;
case 'showOrder':
$Page->addToBody(showOrderDetails(TRUE));
break;
case 'showOrderList':
$Page->addToBody(showConsumerOrderList());
break;
case 'employee':
include 'employee.php';
break;
case 'service':
include 'serviceCenter.php';
break;
case 'serviceOrders':
include 'serviceOrders.php';
break;
case 'showMessage':
$Page->addToBody(showMessage());
break;
case 'showNewsletter':
$Page->addToBody(showNewsletter());
break;
case 'newsletter':
$Page->addToBody(unsubscribeNewsletter());
break;
default:
$Page->addToBody(createLandingPage());
break;
}
?> |
Voor mezelf houd dit de code erg overzichtelijk en alle modules staan hierdoor dus in (een paar) losse .php files. Hierdoor is het heel makkelijk aan het project te werken en kan je iets stukmaken zonder dat meteen het hele project stuk is. Iets wat bij de codebrij spaghetti die mijn CMS/forum gamesdust.nl is geworden een drama is.

Zie ook:
https://gathering.tweakers.net/forum/view_message/42195602
Linkje naar een demo versie:
http://popashop.onlinewebshop.net/
Linkje naar de source:
http://gamesdust.nl/downloads/popashop_source.rar
Linkje naar de documentatie:
http://popashop.onlineweb...op_gebruiksaanwijzing.pdf