من موقع ecommerce ب laravel الجزء الأول


فهاد المشروع من موقع ecommerce ب laravel غادي نقادو موقع كيمكن المستخدم من الإطلاع على مجموعة من المنتوجات لي عندنا فقاعدة البيانات ومن بعد يمكنلو يختار منتوج ويزيدو فالسلة من بعد يدوز للأداء بواسطة بايبال.

نظرة سريعة بالفيديو

1- تحميل المشروع

أول شيء غادي تديرو هو تثبيت composer لي غادي يمكنك من تثبيت laravel يمكنلك تبحث عليه فغوغل وتحملو من الموقع الرسمي من بعد غادي تفتح cmd غادي نكتب الأمر cd c:/wamp/www من بعد غادي تديرالأمر composer create-project --prefer-dist laravel/laravel lara_ecommerce الإسم ديال المشروع هو lara_ecommerce من بعد ما يتزاد المجلد ف wamp/www غادي تزيد قاعدة بيانات ف phpmyadmin وتسميها laraecom الكود ديالها هو :

                                --
-- Structure de la table `categories`
--

CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `titre` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=0 ;

--
-- Structure de la table `products`
--

CREATE TABLE IF NOT EXISTS `products` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `titre` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `description` text COLLATE utf8_unicode_ci NOT NULL,
  `qte` int(11) NOT NULL,
  `prix` double(8,2) NOT NULL,
  `vendu` int(11) NOT NULL DEFAULT '0',
  `image` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `category_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `products_category_id_index` (`category_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=0 ;

--
-- Structure de la table `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nom` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `prenom` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `ville` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `is_admin` tinyint(1) NOT NULL DEFAULT '0',
  `remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=0 ;
                            

2- الإتصال بقاعدة البيانات

من بعد فالملف env. لي فالمجلد الرئيسي ديال المشروع كنظيف عليه التغييرات لي غادي يمكنو باش نتصل بقاعدة البيانات الكود لي تغير هو :

                                DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laraecom
DB_USERNAME=root
DB_PASSWORD=
                            

3- الملف HomeController.php

من بعد كانزيد ل Controller ديال الصفحة الرئيسية لي كيمكن من عرض المنتوجات لي عندنا فقاعدة البيانات فكنمشي ل app/Http/Controllers كنزيد ملف جديد كنسميه HomeController.php لي غادي تكون فيه fonction index لي كتسترجع الفئات لي عندنا فقاعدة البيانات والمنتوجات والمنتوجات الأكثر مبيعا وكترسلها للملف index ولي غادي نزيدوه من بعد الكود ديال الملف هو :

                                <?php
namespace App\Http\Controllers;
use App\Product;
use App\Category;
class HomeController extends Controller
{
   public function index(){
       $categories = Category::all();
       $products = Product::orderBy('created_at','desc')->paginate(6);
       $bestSold = Product::orderBy('vendu','desc')->where('vendu','>',0)->get();
       return view('index',compact('products','categories','bestSold'));
   }
}
                            

4- الملف Product.php

من بعد ف app كنزيد ملف كنسميه Product.php ولي عبارة عن model فيه الكود لي كيعطي الأمر للlaravel باش يخلينا نعمرو المعلومات الخاصة بالمنتوج فجدول المنتوجات الكود ديال الملف هو :

                                    <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    //
    public $fillable = ['vendu','titre','description','qte','prix','image','vendu','category_id'];
}

                                

5- الملف ProductsController.php

كنمشي ل app/Http/Controllers كنزيد ملف جديد كنسميه ProductsController.php لي غادي تكون فيه fonction index لي كتسترجع المنتوجات من قاعدة البيانات وكترسلهم للملف index ديال المنتوجات ولي غادي نزيدوه من بعد ثم كاين ل fonction create لي كتوجه المستخدم لي عندو امتياز الأدمين للملف الخاص بإضافة منتوج ثم fonction store لي كتمكن من إضافة منتوج لقاعدة البيانات من بعد مكتحقق بلي حتى شي حقل ما خاوي وبلي المستخدم زاد الصورة ديال المنتوج ثم كاين fonction show لي كتسترجع منتوج واحد بواسطة ل id وكتعرضو فالملف show لي غادي نزيدو من بعد ثم كاين fonction update لي كتعدل المعلومات الخاصة بمنتوج من بعد مكتحقق بلي حتى شي حقل ما خاوي ثم كاين fonction destroy لي كتسترجع منتوج واحد بواسطة ل id وكتمسحو من قاعدة البيانات ثم fonction getPanier لي كتوجه المستخدم للملف الخاص بعرض سلة المنتوجات وغادي نزيدوه من بعد كاين fonction addToCart لي كتزيد منتوج اختارو المستخدم فالسلة لي هي لpanier ثم كاين fonction adminProducts لي كتعرض المنتوجات لي عندنا فملف عرض المنتوجات ديال الأدمن ثم كاين fonction productByCat لي كتمكن من عرض المنتوجات حسب الفئة لي ظغط عليها المستخدم ثم كاين fonction cancelCart لي كتلغي لpanier لي عند المستخدم الملف هو :

                                    <?php

namespace App\Http\Controllers;
use App\Category;
use Illuminate\Http\Request;
use App\Product;
use App\Http\Requests;
use Cart;
use DB;
class ProductsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        $products = Product::orderBy('created_at','desc')->get();
        return view('products.index',compact('products'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        return view('products.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
        $this->validate($request,[
            'titre'=>'required|max:100',
            'desc'=>'required|max:1000',
            'qte'=>'required',
            'prix'=>'required',
            'file'=>'required'
        ],[
            'required' => 'Ce champ est obligatoire'
        ]);
        if($request->hasFile('file')){
            $file = $request->file('file');
            $name = time().'_'.$file->getClientOriginalName();
            $file->move('images',$name);
            $product = new Product();
            $product->titre = $request->titre;
            $product->description = $request->desc;
            $product->qte = $request->qte;
            $product->prix = $request->prix;
            $product->image = $name;
            $product->save();
            return redirect()->route('index')->with(['success'=>'Produit ajouté avec succés']);
        }
        return redirect()->route('index')->with(['fail'=>'Erreur veuillez réessayer']);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
        $product = Product::find($id);
        return view('products.show',compact('product'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
         $this->validate($request,[
            'titre'=>'required|max:100',
            'desc'=>'required|max:1000',
            'qte'=>'required',
            'prix'=>'required',
        ],[
            'required' => 'Ce champ est obligatoire'
        ]);
        $product = Product::find($id);
        $product->titre = $request->titre;
        $product->description = $request->desc;
        $product->qte = $request->qte;
        $product->prix = $request->prix;
        $product->update();
        return redirect()->route('admin.products')->with(['success'=>'Produit modifié avec succés']);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
        $product = Product::find($id);
        $product->delete();
        return redirect()->route('admin.products')->with(['success'=>'Produit supprimé avec succés']);
    }
    public function getPanier()
    {
        //
        return view('products.cart');
    }
    public function addToCart(Request $request){
        Cart::add(['id' => $request->id, 'name' => $request->titre, 'qty' => $request->qte, 'price' => $request->prix,'options' => ['size' => 'large']]);
        $product = Product::find($request->id);
        $product->vendu+=$request->qte;
        $product->update();
        return redirect()->route('index');
    }
    public function adminProducts(){
        $products = Product::orderBy('created_at','desc')->get();
        return view('admin.products.index',compact('products'));
    }
    public function productByCat($categorie){
        $products = Category::find($categorie)->products;
        $categorie = Category::find($categorie);
        return view('products.product-cat',compact('products','categorie'));
    }
    public function cancelCart(){
        Cart::destroy();
        return redirect()->route('index');
    }
}

                                


إشترك في قناتنا على اليوتيوب

بحث في الموقع


إشترك للتوصل بالجديد