site ecommerce php mvc & pdo الجزء الخامس
فهاد الجزء الخامس من site ecommerce php mvc & pdo غادي نكملوا l'affichage ديال les produits فالصفحة الرئيسية من بعد غادي نشوفوا كيفاش نعرضوا المعلومات الخاصة ب produit ضغطنا عليه أيضا غادي نشوفوا كيفاش نزيدوه فل panier.
نظرة سريعة بالفيديو
1- إضافة الملف index.php
ف dossier ديال ل projet ديالنا غادي نزيدو fichier index.php فيه les pages ديالنا لي غادي نزيدهم ف array وغادي ن tester يلا كان عندي الأدمن connecté غادي نخليه يدخل ل les pages الخاصين به يلا مكنش أدمن غادي نوجهوا للصفحة لي بغا أيضا غادي نتحقق واش ل page لي مشالها المستخدم كاينة يلا مكنتش غادي نعرض 404 أيضا الصفحة غير موجودة.
الكود ديال الملف هو :
<?php
require_once './autoload.php';
require_once("./views/includes/header.php");
$home = new HomeController();
$pages = [
'home','cart','dashboard','updateProduct','deleteProduct',
'addProduct','emptycart','show','cancelcart','register',
'login','checkout','logout','products','orders','addOrder'
];
if(isset($_GET['page'])){
if(in_array($_GET['page'],$pages)){
$page = $_GET['page'];
if($page === "dashboard" || $page === "deleteProduct"
|| $page === "addProduct" || $page === "updateProduct" || $page === "products" ||
$page === "orders"){
if(isset($_SESSION['admin']) && $_SESSION['admin'] == true){
$admin = new AdminController();
$admin->index($page);
}else{
include('views/includes/404.php');
}
}else{
$home->index($page);
}
}else{
include('views/includes/404.php');
}
}else{
$home->index("home");
}
require_once("./views/includes/footer.php");
2- إضافة الملف home.php
ف dossier views زيد fichier home.php هادي هي الصفحة الرئيسية ديالنا لي فيها الكود لي كنسترجع به les produits و les catégories أيضا عندي form لي فاش كنضغط على رابط مشاهدة produit كتديني للصفحة show لي غادي نزيدو من بعد بكود javascript لي غادي نزيدوه من بعد.
نفس الشي يلا ضغطت على شي catégorie كنسترجع les produits الخاصين بها وكنعرضهم فنفس الصفحة.
الكود ديال الملف هو :
<?php
$categories = new CategoriesController();
$categories = $categories->getAllCategories();
if(isset($_POST["cat_id"])){
$products = new ProductsController();
$products = $products->getProductsByCategory($_POST['cat_id']);
}else{
$data = new ProductsController();
$products = $data->getAllProducts();
}
?>
<div class="container">
<div class="row my-5">
<div class="col-md-8">
<div class="row">
<?php
if(count($products) > 0) :
?>
<?php
foreach($products as $product) :
?>
<div class="col-md-6 mb-2">
<div class="card h-100 bg-white rounded p-2">
<div class="card-header bg-light">
<form id="form" method="post" action="<?php echo BASE_URL;?>show">
<input type="hidden" name="product_id" id="product_id">
</form>
<h3 onclick="submitForm(<?php echo $product["product_id"];?>)" class="card-title">
<?php
echo $product['product_title'];
?>
</h3>
</div>
<div class="card-img-top">
<img src="./public/uploads/<?php echo $product["product_image"];?>" alt="" class="img-fluid">
</div>
<div class="card-body">
<p class="card-text">
<?php
echo $product['short_desc'];
?>
</p>
</div>
<div class="card-footer">
<span class="badge badge-danger p-2">
<?php
echo $product['product_price'];
?>dh
</span>
<span class="badge badge-dark p-2">
<strike>
<?php
echo $product['old_price'];
?>dh
</strike>
</span>
</div>
</div>
</div>
<?php
endforeach;
?>
<?php
else :
?>
<div class="alert alert-info">
aucun produit trouvé
</div>
<?php
endif;
?>
</div>
</div>
<div class="col-md-4">
<h3 class="text-secondary m-3 text-center">
Catégories
</h3>
<ul class="list-group">
<?php
foreach($categories as $category) :
?>
<li class="list-group-item text-center">
<form id="catPro" method="post" action="<?php echo BASE_URL;?>">
<input type="hidden" name="cat_id" id="cat_id">
</form>
<a onclick="getCatProducts(<?php echo $category['cat_id'];?>)" class="btn btn-link text-secondary" style="text-decoration:none;font-size:24px;cursor:pointer">
<?php
echo $category['cat_title'];
?>
(<?php
$productsByCat = new ProductsController();
$productsByCat = $productsByCat->getProductsByCategory($category['cat_id']);
echo count($productsByCat);
?>)
</a>
</li>
<?php
endforeach;
?>
</ul>
</div>
</div>
</div>
3- إضافة الملف main.js
ف dossier public زيد dossier js فيه زيد fichier main.js لي فيه غادي يكون الكود لي فيه داك les fonctions لي زدنا ف home.php فاش كنضغط على les liens أيضا فيه fonction deleteForm لي غادي نحتاجوها فحذف produit فاش نوصلوا للجزء الخاص بالأدمن.
الكود ديال الملف هو :
function getCatProducts($id) {
const input = document.querySelector("#cat_id");
const form = document.querySelector("#catPro");
input.value = $id;
form.submit();
}
function submitForm($id) {
const input = document.querySelector("#product_id");
const form = document.querySelector("#form");
input.value = $id;
form.submit();
}
function deleteForm($id) {
const input = document.querySelector("#delete_product_id");
const form = document.querySelector("#delete_form");
input.value = $id;
form.submit();
}
4- إضافة الملف show.php
دائما ف views زيد fichier show.php لي فيه غادي يكون الكود لي كيمكن من إسترجاع ل produit من la base de données ودائما بإستعمال les fonctions لي سبق وزدنا فل controller ProductsController.
أيضا عندي الفورم لي كتمكني باش نزيد ل produit فل panier ولي كتديني ل la page checkout ولي غادي نزيدوها من بعد.
الكود ديال الملف هو :
<?php
$data = new ProductsController();
$product = $data->getProduct();
?>
<div class="container">
<div class="row my-5">
<div class="col-md-8">
<div class="row">
<div class="col-md-12 mb-2">
<div class="card h-100 bg-white rounded p-2">
<div class="card-header bg-light">
<h3 class="card-title">
<?php
echo $product->product_title;
?>
</h3>
</div>
<div class="card-img-top">
<img width="100%"
src="./public/uploads/<?php echo $product->product_image;?>" alt="" class="img-fluid rounded">
</div>
<div class="card-body">
<p class="card-text">
<?php
echo $product->short_desc;
?>
</p>
</div>
<div class="card-footer">
<span class="badge badge-danger p-2">
<?php
echo $product->product_price;
?>dh
</span>
<span class="badge badge-dark p-2">
<strike>
<?php
echo $product->old_price;
?>dh
</strike>
</span>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<h3 class="text-secondary m-3 text-center">
Qté :
</h3>
<form method="post" action="<?php echo BASE_URL;?>checkout">
<div class="form-group">
<input type="number" name="product_qte" id="product_qte" class="form-control" value="1">
<input type="hidden" name="product_title" value="<?php echo $product->product_title;?>">
<input type="hidden" name="product_id" value="<?php echo $product->product_id;?>">
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Ajouter au panier">
</div>
</form>
</div>
</div>
</div>
5- إضافة الملف checkout.php
دائما ف views زيد fichier checkout.php لي فيه غادي يكون الكود لي كيمكن من إضافة ال produit لي اختارينا ل panier اول حاجة كنتحقق واش كاين فل panier يلا كان كنعرض رسالة بانه déja فل panier مكانش كنتحقق من الكمية لي كاينة ف stock يلا كانت قل من داكشي لي طلبنا كنعرض رسالة بأن الكمية المتوفرة غير كافية كان كلشي هو هذاك كنزيد ل produit ف session وكنوجه المستخدم ل cart.php لي غادي نزيدوها من بعد.
الكود ديال الملف هو :
<?php
if(isset($_POST["product_id"])){
$id = $_POST["product_id"];
$data = new ProductsController();
$product = $data->getProduct();
if($_SESSION["products_".$id]["title"] == $_POST["product_title"]){
Session::set("info","Vous avez déja ajouté ce produit au panier");
Redirect::to("cart");
}else{
if($product->product_quantity < $_POST["product_qte"]){
Session::set("info","La quantité disponible est : $product->product_quantity");
Redirect::to("cart");
}else{
$_SESSION["products_".$product->product_id] = array(
"id" => $product->product_id,
"title" => $product->product_title,
"price" => $product->product_price,
"qte" => $_POST["product_qte"],
"total" => $product->product_price * $_POST["product_qte"],
);
$_SESSION["totaux"] += $_SESSION["products_".$product->product_id]["total"];
$_SESSION["count"] += 1;
Redirect::to("cart");
}
}
}else{
Redirect::to("cart");
}