|
basket_left.php Vindue med lille indkøbskurv Placeres i "_header"-delen af sitet. Opdateres med "basket_small_refesh.php". Se nedenfor. |
<?php $objBasket = new Basket(); ?> <h2>Your Basket</h2> <dl id="basket_left"> <dt>No. of items:</dt> <dd class="bl_ti"><span><?php echo $objBasket->_number_of_items; ?></span></dd> <dt>Sub-total:</dt> <dd class="bl_st">£<span><?php echo number_format($objBasket->_sub_total, 2); ?></span></dd> <dt>VAT (<span><?php echo $objBasket->_vat_rate; ?></span>%):</dt> <dd class="bl_vat">£<span><?php echo number_format($objBasket->_vat, 2); ?></span></dd> <dt>Total (inc):</dt> <dd class="bl_total">£<span><?php echo number_format($objBasket->_total, 2); ?></span></dd> </dl> <div class="dev br_td"> </div> <p><a href="/?page=basket">View Basket</a> | <a href="/?page=checkout">Checkout</a></p> <div class="dev br_td"> </div> |
_header.php Indsæt lille indkøbskurv i _header |
<div id="left"> <?php require_once('basket_left.php'); ?> <?php if (!empty($cats)) { ?> |
_footer.php Links til javaScript programmer" I stedet for at indsætte jquery-xxx.min.js kan der også etableres CDN-link dertil. Se basket.js nederst på denne side. |
<script src="/js/jquery-xxx.min.js" type="text/javascript"></script> <script src="/js/basket.js" type="text/javascript"></script> </body> |
catalogue.php Indsæt linket "activeButton()" Toggler mellem "Remove from basket" og "Add to basket". Linket til funktionen indsættes ved hver enkelt vare i kataloget og anvendes til at etablere "køb" af en vare eller annullere tidligere "køb" af varen. |
<p><?php echo Basket::activeButton($row['id']); ?></p> |
Basket.php Funktionen "activeButton()" |
public static function activeButton($sess_id) { if(isset($_SESSION['basket'][$sess_id])) { $id = 0; $label = "Remove from basket"; } else { $id = 1; $label = "Add to basket"; } $out = "<a href=\"#\" class=\"add_to_basket"; //klasse i basket.js $out .= $id == 0 ? " red" : null; $out .= "\" rel=\""; $out .= $sess_id."_".$id; $out .= "\">{$label}</a>"; return $out; } |
basket.js Ajax: Henter data for vare selekteret med "add_to_basket". Ved klik på "add_to_basket" hentesopsamles i nye data til kurven for den pågældende vare.Udtrukne data returneres til browser som json-fil med basket.js | refreshSmallBasket(). Startes fra Basket.php | activeButton |
$(document).ready(function() { if ($(".add_to_basket").length > 0) { $(".add_to_basket").click(function() { var trigger = $(this); var param = trigger.attr("rel"); var item = param.split("_"); $.ajax({ type: 'POST', url: '/mod/basket.php', //se nedenfor dataType: 'json', data: ({ id : item[0], job : item[1] }), success: function(data) { var new_id = item[0] + '_' + data.job; job se basket.php nedenfor. if (data.job != item[1]) { if (data.job == 0) { trigger.attr("rel", new_id); trigger.text("Remove from basket"); trigger.addClass("red"); } else { trigger.attr("rel", new_id); trigger.text("Add to basket"); trigger.removeClass("red"); } refreshSmallBasket(); } }, error: function(data) { alert("An error has occurred"); } }); return false; }); } |
basket.php Behandler ajax-request fra "add_to_basket". Læser json-fil fra basket.js. Starter objCatalogue | getProduct($id). Udfører Session::x funktion. Uddata leveres son JSON-fil ($out) - javaScript array Startes fra "add_to_basket" |
<?php require_once('../inc/autoload.php'); if (isset($_POST['job']) && isset($_POST['id'])) { $out = array(); $job = $_POST['job']; $id = $_POST['id']; $objCatalogue = new Catalogue(); $product = $objCatalogue->getProduct($id); if (!empty($product)) { switch($job) { case 0: Session::removeItem($id); $out['job'] = 1; break; case 1: Session::setItem($id); $out['job'] = 0; break; } echo json_encode($out); } } |
Catalogue.php Hent data for selekteret vare Startes fra basket.php |
public function getProduct($id) { $sql = "SELECT * FROM `{$this->_table_2} ` WHERE `id` = '".$this->db->escape($id)."'"; return $this->db->fetchOne($sql); } |
Session.php | setItem() / removeItem() Opdaterer $_SESSION[basket] Opdaterer varenummer og mængdedata til indkøbskurv i $_SESSION[basket] Startes fra basket.php |
class Session { public static function setItem($id, $qty = 1) { $_SESSION['basket'][$id]['qty'] = $qty; } public static function removeItem($id, $qty = null) { if ($qty != null && $qty < $_SESSION['basket'][$id]['qty']) { $_SESSION['basket'][$id]['qty'] = ($_SESSION['basket'][$id]['qty'] - $qty); } else { $_SESSION['basket'][$id] = null; unset($_SESSION['basket'][$id]); } } |
basket.js | refreshSmallBasket() Ajax: JSON-response opdaterer "small_basket"-vinduet Selve opdateringen foretages med: $("#basket_left." + k + " span").text(v); Startes fra "add_to_basket" |
function refreshSmallBasket() { $.ajax({ url: '/mod/basket_small_refresh.php', //se nedenfor dataType: 'json', success: function(data) { $.each(data, function(k, v) { $("#basket_left ." + k + " span").text(v); }); }, error: function(data) { alert("An error has occurred"); } }); } |
basket_small_refesh.php Etablerer response-data for "refreshSmallBasket()" Etablerer data til opdatering af Small basket i browser. Startes fra basket.js | refreshSmallBasket() |
<?php require_once("../inc/autoload.php"); $objBasket = new Basket(); $out = array(); $out['bl_ti'] = $objBasket>; $out['bl_st'] = number_format($objBasket->_sub_total, 2); $out['bl_vat'] = number_format($objBasket->_vat, 2); $out['bl_total'] = number_format($objBasket->_total, 2); echo json_encode($out); |
Basket.php __construct() til Basket.php Startes fra basket_small_refesh.php Funktionerne opdaterer parametrene ved instantiering. |
class Basket { public $_inst_catalogue; public $_empty_basket; public $_vat_rate; public $_number_of_items; public $_sub_total; public $_vat; public $_total; public function __construct() { $this->_inst_catalogue = new Catalogue(); $this->_empty_basket = empty($_SESSION['basket']) ? true : false; $objBusiness = new Business(); $this->_vat_rate = $objBusiness->getVatRate(); $this->noItems(); $this->subtotal(); $this->vat(); $this->total(); } public function noItems() { $value = 0; if (!$this->_empty_basket) { foreach($_SESSION['basket'] as $key => $basket) { $value += $basket['qty']; } } $this->_number_of_items = $value; } public function subtotal() { $value = 0; if (!$this->_empty_basket) { foreach($_SESSION['basket'] as $key => $basket) { $product = $this->_inst_catalogue->getProduct($key); $value += ($basket['qty'] * $product['price']); } } $this->_sub_total = round($value, 2); } public function vat() { $value = 0; if (!$this->_empty_basket) { $value = ($this->_vat_rate * ($this->_sub_total / 100)); } $this->_vat = round($value, 2); } public function total() { $this->_total = round(($this->_sub_total + $this->_vat), 2); } |
Business.php | getVatRate() Henter data til parameteret _vat_rate. Startes fra __Construct() |
public function getVatRate() { $business = $this->getBusiness(); return $business['vat_rate']; } |