ثبت دسته‌بندی محصولات

زمان قرارگیری : 30 اردیبهشت 1399
زمان این قسمت : 12:00
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 350 نفر
قیمت دوره 259000 تومان
وضعیت دوره در حال برگزاری
زمان کل دوره 27:04:26
تعداد قسمت‌ها 118
نوع دسترسی نقدی

در این جلسه بخش دسته‌بندی محصولات را ثبت می‌کنیم و به شما آموزش میدهم که چطور دسته‌بندی با n سطح را در هر جای که مایل بودید نمایش دهید.

بخش اول
مقدمات
رایگان 09:10
بخش ششم
مفاهیم هسته لاراول
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 350 نفر
قیمت دوره 259000 تومان
وضعیت دوره در حال برگزاری
زمان کل دوره 27:04:26
تعداد قسمت‌ها 118
نوع دسترسی نقدی

آنلاین
user-avatar
مدرس دوره حسام موسوی

اول داستان، طراح گرافیک بودم و ۲ سالی به عنوان طراح مشغول بودم، بعد به برنامه‌نویسی علاقمند شدم و الان بیشتر از ۱۰ ساله که عاشق کدزنی و چالش‌های پروژه‌های مختلفم. به تدریس علاقه خاصی دارم و دوست دارم دانشی که در این راه بدست آوردم را در اختیار دیگران هم قرار بدم. 

سوالات و گفتگو‌ها

سوالات و گفتگو‌ها

اگر سوال و مشکلی یا حتی بحثی در یکی از حوزه‌های برنامه‌نویسی دارید این بخش به شما کمک ویژه‌ای خواهد کرد

دورهای پیشنهادی

مشاهده همه دوره ها
آموزش لاراول

آموزش لاراول

فریمورک لاراول یکی از محبوبترین و بهترین فریمورک های حال حاضر برای زبان php می باشد، آموزش لاراول راکت می‌تواند به شکل رایگان به شما لاراول را آموزش د...

ساخت Api با Laravel و GraphQl

ساخت Api با Laravel و GraphQl

graphQl یک ابزار جدید برای ایجاد کردن Api پیشرفته برای برنامه های ماست که توسط فیسبوک معرفی شده است.  این ابزار به عنوان یک Query language شناخته میشو...

دسترسی رایگان برای اعضای ویژه
ساخت یک وبسایت آموزشی (فروشگاهی) با لاراول

ساخت یک وبسایت آموزشی (فروشگاهی) با لاراول

این دوره یک دوره کامل برای افرادی است که میخواهند لاراول را به درستی آموزش ببینند بعد از دوره آشنای با لاراول که بصورت رایگان در دسترس همگان قرار گرفت...

آموزش پکیج نویسی لاراول

آموزش پکیج نویسی لاراول

اگر با لاراول و پکیج ها آشنا باشید مطمئنن میدانید که پکیج ها بخش مهمی در لاراول هستند و به برنامه نویسان و توسعه دهندگان لاراول کمک میکنند تا بتوانن ب...

دسترسی رایگان برای اعضای ویژه

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
آنلاین
user-avatar
Mohammadreza Ghomi
1 ماه پیش

نمایش محصولات در دسته بندی ها کاملا با توابع بازگشتی که آموزش دادین قابل اجرا هست تا اینجای کار درست
اما زمانی که بخواییم وارد یک دسته بندی بشیم محصولات اون دسته بندی و محصولات زیر دسته اون هم نمایش داده بشه با این فرق از جدیدترین محصول به قدیمی ترین محصول باشه یا پرفروش ترین باید چیکار کنیم
آیا از توابع بازگشتی میشه در کنترلر ها استفاده کرد؟
من به این شکل عمل کردم تا بتونم sort کنم به شکل دلخواه اما فکر نکنم خیلی بهینه باشه ممنون میشم روش بهتری رو پیشنهاد بدین :
در مدل دسته بندی ها اومدم به شکل زیر کار کردم :

 /**
     * @return HasMany
     */
    public function recursiveChildren() {
        return $this->child()->with('recursiveChildren');
        //It seems this is recursive
    }

    /**
     * @param $query
     * @param Category $category
     * @return Collection
     */
    public function scopeChildProducts($query , Category $category)
    {
        $products = collect();
        if($category->recursiveChildren){
            foreach ($category->recursiveChildren as $category2){
                if($category2->recursiveChildren){
                    foreach ($category2->recursiveChildren as $category3){
                        if($category3->recursiveChildren){
                            foreach ($category3->recursiveChildren as $category4){
                                if($category4->recursiveChildren){
                                    foreach ($category4->recursiveChildren as $category5){

                                        foreach ($category5->products as $product5){
                                            $products->add($product5);
                                        }
                                    }
                                }
                                foreach ($category4->products as $product4){
                                    $products->add($product4);
                                }
                            }
                        }
                        foreach ($category3->products as $product3){
                            $products->add($product3);
                        }
                    }
                }
                foreach ($category2->products as $product2){
                    $products->add($product2);
                }
            }
        }

        foreach ($category->products as $product){
            $products->add($product);
        }

        return $products;

    }

و در کنترلر مورد نظر به شکل زیر عمل کردم :

    public function show(Category $category)
    {
        $products = Category::childProducts($category)->sortByDesc('price')->chunk(24);
        isset($products[0]) ? $products = $products[0] : $products = [];

        return view('pc.single-category', compact('category' , 'products'));
    }
آنلاین
user-avatar
حسام موسوی
4 هفته پیش

درود احتمالا خودتون فهمیدید چیزی که پیاده کردید نباس اصلا درست باشه
الان شما قصد دارید در یک صفحه محصولات دسته اصلی و زیردسته‌ها رو به نمایش در بیارید ؟

آنلاین
user-avatar
Mohammadreza Ghomi
4 هفته پیش

درسته دقیقا معلوم نیست کاربر روی کدوم سطح کلیک میکنه و واردش میشه من میخوام وارد هر سطحی که شد محصولات اون سطح و اگه فرزندی داشت محصولات فرزندش هم نمایش داده بشه
این راحت با تابع بازگشتی و توی blade لاراول قابل پیاده سازیه اما مشکل اینجاست از روش تابع بازگشتی نمیشه اینارو با توجه به جدید و قدیمی بودن یا با توجه به میزان فروش یا بازدید به ترتیب نمایش داد.

آنلاین
user-avatar
Mohammadreza Ghomi
4 هفته پیش

الان اومدم همینکارو به شکل زیر انجام دادم هر دو خروجی یکسانی دارند و سوالم اینه که این روش ها بهینه هستند؟
و یا روش بهتری وجود داره؟

    public function scopeChildProducts($query , Category $cate)
    {
        $products = [];
        $categories = [$cate];
        while(count($categories) > 0){
            $nextCategories = [];
            foreach ($categories as $category) {
                $products = array_merge($products, $category->products->all());
                $nextCategories = array_merge($nextCategories, $category->child->all());
            }
            $categories = $nextCategories;
        }

        return  new Collection($products); 
    }
آنلاین
user-avatar
حسام موسوی
4 هفته پیش

راه حل زیر رو هم میتونید در نظر بگیرید.
قدم 1 : کد زیر رو به مدل Category اضافه کنید.

    public function child()
    {
        return $this->hasMany(Category::class , 'parent' , 'id');
    }

    public function children()
    {
        return $this->child()->with('children');
    }

البته child احتمالا از قبل اضافه شده
قدم 2 : کد زیر رو به AppServiceProvider و متد boot اضافه کنید دو متد جدید برای collection ها در اختیارتون قرار میده

   /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Collection::macro('flattenTree', function() {
            $items = [];
            foreach ($this->items as $node) {
                $items = array_merge($items, $this->flattenNode($node));
            }

            return new static($items);
        });

        Collection::macro('flattenNode', function($node) {
            $items = [];
            $items[] = $node;
            foreach ($node->children as $childNode) {
                $items = array_merge($items, $this->flattenNode($childNode));
            }
            $node->unsetRelation('children');
            return $items;
        });
    }

اگر اطلاعاتی از قبل در boot دارید این دو macro رو در کنارشون قرار بدید. یادتون نره Collection رو هم use کنید در AppServiceProvider با namespace زیر

use Illuminate\Database\Eloquent\Collection;

و کار تمومه حالا با کد زیر میتونید اطلاعاتتون رو واکشی کنید.

    $category   = \App\Category::with('children')->find(2);
    $categories = $category->children->flattenTree()->pluck('id');

    return \App\Product::whereHas('categories' , function ($query) use ($categories) {
        return $query->whereIn('id' , $categories);
    })->paginate(10);
آفلاین
user-avatar
Meysam Sedigh
1 ماه پیش

سلام استاد
لطفا میشه راهنماهی کنید برای دسته بندی ها اگه بخوایم روی هر دسته بندی کلید کنیم و وارد اون دسته بندی شده و به همین ترتیب تا به محصول برسیم چیکار باید کرد ؟

آنلاین
user-avatar
حسام موسوی
1 ماه پیش

سلام یک روت میازید که دسته‌بندی رو زمانی که روی اون لینک زدید دریافت کنید و بعد با روابطی که ساختیم میتونید محصولاتی که مربوط به اون دسته‌بندی هستند رو برگردونید

آفلاین
user-avatar
waltun
2 ماه پیش

سلام خسته نباشید
راجع به نمایش دسته بندی ها، من میخوام دسته بندی هام رو توی منوی اصلی سایت قرار بدم، یعنی مثلا اونایی که parent_id صفر رو دارن میشن دسته اصلی و توی منوی اصلی قرار میگیرند، حالا هر کدوم از اینا یک سری زیر دسته داره دیگه میخوام مثلا زیر دسته های مربوط به هرکدومشون وقتی روشون هاور میکنم نشون داده بشن، بحث view اصلا مد نظر نیست فقط من باید چجوری شرطی رو بذارم که فقط زیردسته های مثلا دسته بندی الکترونیکی رو نشون بده
ممنون ازتون
اینا میشن دسته بندی های اصلی ( با parent_id صفر )
دسته بندی های تصویر
اینا هم میشن زیر دسته های هر دسته بندی اصلی
زیردسته های دسته بندی اصلی

آنلاین
user-avatar
حسام موسوی
2 ماه پیش

سلام آیا نمایش دسته بندی‌های شما n سطحی هست ؟
اگر اره باید از روشی که گفتیم استفاده کنید اگر نه با روابط میتونید دسته‌بندی‌ها رو برگردونید قطعا اول همه دسته‌بندی‌های سطح 0 رو میگیرید و بعد با ایجاد رابطه دسته‌بندی‌های فرزند رو بر میگردونید

آفلاین
user-avatar
waltun
2 ماه پیش

یعنی همون روش بازگشتی که یه صفحه blade جدا می ساختیم ؟

آنلاین
user-avatar
حسام موسوی
1 ماه پیش

همون روشی که در نمایش دسته‌بندی بینهایت استفاده کردیم رو میگم

آفلاین
user-avatar
waltun
1 ماه پیش

خسته نباشید، یک سوال دیگه که داشتم راجع به این الان با همون روش بازگشتی کار میکنه خب اما یه مشکلی که داره اینه که مثلا من اگر روی تهویه مطبوع هاور کنم کل زیردسته هارو میاره، اما میخوام مثلا رو تهویه مطبوع که هاور شد فقط زیر دسته های همین دسته بندی رو نمایش بده و اگر بار روی دسته بندی بعدی که خانگی، اداری هست هاور شد زیر دسته های مربوط به خودش رو نمایش بده، چنین کاری رو چجوری میشه انجام داد ؟
ممنون

آنلاین
user-avatar
حسام موسوی
1 ماه پیش

دیگه اینو با جاوااسکریپت میتونید خیلی راحت انجام بدید مهم اینکه زیر دسته‌ها مرتب بیاد

آفلاین
user-avatar
reza ataei
3 ماه پیش

سلام مهندس جان.آیا در ادامه این دوره آموزشی به Api نویسی در لاراول 7 هم اشاره ای خواهید کرد یا خیر؟

آنلاین
user-avatar
حسام موسوی
3 ماه پیش

سلام خیر دوره api نویسی جدا هست و میتونید ازش استفاده کنید

آفلاین
user-avatar
علی باقری
3 ماه پیش

سلام .
این دوره تمام شده ؟

آنلاین
user-avatar
حسام موسوی
3 ماه پیش

خیر با یک وقفه ادامه پیدا خواهد کرد

آفلاین
user-avatar
ZR
2 ماه پیش

سلام
لطفا نحوه Logگیری و نمایش آن در پنل مدیریت هم آموزش بدین