نمایش نظرات در صفحه محصولات

زمان قرارگیری : 21 اردیبهشت 1399
زمان این قسمت : 16:45
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 328 نفر
قیمت دوره 259000 تومان
وضعیت دوره در حال برگزاری
زمان کل دوره 26:39:36
تعداد قسمت‌ها 117
نوع دسترسی نقدی

در این جلسه قصد دارم لیست نظرات را در صفحه محصول با روابطی که وجود دارد به نمایش در بیاورم تا شما به شکل کلی با این روند آشنا شوید.

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

تعداد شرکت کنندگان 328 نفر
قیمت دوره 259000 تومان
وضعیت دوره در حال برگزاری
زمان کل دوره 26:39:36
تعداد قسمت‌ها 117
نوع دسترسی نقدی

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

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

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

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

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

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

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

آموزش لاراول

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

ساخت Restful Api با Laravel و Lumen

ساخت Restful Api با Laravel و Lumen

به زبان ساده، APIها (مخفف Application Programming Interface) رابط‌هایی نرم‌افزاری هستند که ارتباط بین نرم‌افزارهای مختلف را پیاده‌سازی می‌کنند. در دنی...

آشنایی با امکانات جدید لاراول 5.5

آشنایی با امکانات جدید لاراول 5.5

در همین ابتدای این دوره باید بگم کسانی میتونن این دوره رو مشاهده کنند که با لاراول آشنا باشن پس اگر هنوز نمی دونید که لاراول چطور کار میکنه ، لطف ابتد...

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

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

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

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

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

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

سلام استاد چرا وقتی کد رو به همون صورت ajax بنویسیم اونوقت ارسال نظر رو که بزنیم modal بسته نمیشه؟؟
البته نظر ثبت میشه در دیتابیس و با رفرش صفحه نمایشم داده میشه
فقط کد هایه ajax که کامنت بود رو از کامنت در اوردم

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

سلام ما این موضوع رو پیاده کردیم در ویدیو اینطور نیست ؟ اینکه بسته نمیشه ممکنه به ساختار html شما مربوط بشه

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

حتی کد شما رو که کپی کردم وقتی به صورت ajax کردم (همونا که کامنت بود رو از کامنت بودن در اوردم ) مدال بسته نشد

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

به کد کپی کردن نیست ممکنه ساختار پروژه شما به شکل دیگه‌ای با کمی جزئیات متفاوت پیش رفته باشه
تو این مورد اگر js بلد باشید که راحت می تونید حلش کنید اگر که بلد نیستید یا نمیخواید سمت frontend رو کار کنید که بهتره ادامه بدید
وگرنه باید js بلد باشید حتما

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

مهندس ببخشید من هر کاری میکنم parent_id همون 0 باقی میمونه و نظرات تو درتو نمیشن..

کد صفحه single

@extends('layouts.app')
@section('script')
    <script>
        $('#sendComment').on('show.bs.modal', function (event) {
            var button = $(event.relatedTarget) // Button that triggered the modal
            let parent_id = button.data('id');

            // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).
            // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.
            var modal = $(this)
            modal.find('input[name="parent_id"]').val(parent_id)
        })
        ////

    </script>
@endsection
@section('content')
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-10 my-2">
                <div class="card">
                    <h5 class="card-header">
                        {{$drug->title}}
                    </h5>
                    <div class="card-body">
                        <h5 class="card-title text-primary">
                            {{$drug->title}}
                        </h5>
                        <p class="card-text">{{$drug->description}}</p>
                    </div>
                </div>
            </div>
        </div>
        <div class="row justify-content-center mt-3">
            <div class="col-md-10">
                <div class="d-flex justify-content-between align-items-center">
                    <h4 class="my-2">بخش نظرات</h4>
                    @auth
                        <button type="button" class="btn btn-primary my-2" data-toggle="modal"
                                data-target="#sendComment" data-id="0">
                            ثبت نظر جدید
                        </button>
                    @endauth
                </div>

                @guest
                    <div class="alert alert-warning">
                        برای ثبت نظر لطفا وارد سایت شوید
                    </div>
                @endguest
                @include('layouts.comments',['comments'=>$drug->comment()->where('parent_id', 0 )->get()])

            </div>

        </div>

    </div>
    @auth
        <div class="modal fade" id="sendComment">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header">
                        <h5 class="modal-title" id="exampleModalLabel">ارسال نظر</h5>
                        <button type="button" class="close mr-auto ml-0" data-dismiss="modal">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                    <form action="{{ route('send.comment') }}" method="post" id="sendCommentForm">
                        @csrf
                        <div class="modal-body">
                            <input type="hidden" name="commentable_id" value="{{ $drug->id }}" >
                            <input type="hidden" name="commentable_type" value="{{ get_class($drug) }}">
                            <input type="hidden" name="parent_id" value="0">

                            <div class="form-group">
                                <label for="message-text" class="col-form-label">پیام دیدگاه:</label>
                                <textarea name="comment" class="form-control" id="message-text"></textarea>
                            </div>
                        </div>
                        <div class="modal-footer">
                            <button type="button" class="btn btn-secondary" data-dismiss="modal">لغو</button>
                            <button type="submit" class="btn btn-primary">ارسال نظر</button>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    @endauth
@endsection

کد مدل کامنت

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    protected $fillable = [
        'comment', 'approved', 'parent_id', 'commentable_id', 'commentable_type'
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

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

    public function commentable()
    {
        return $this->morphTo();
    }
}

کد مدل محصولات

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Drog extends Model
{
    protected $fillable = [
        'title', 'description', 'imgUrl', 'viewCount'
    ];

    public function comment()
    {
        return $this->morphMany(Comment::class, 'commentable');
    }

}

کد صفحه کامنت

@foreach($comments as $comment)
    <div class="card my-3">
        <div class="card-header d-flex justify-content-between">
            <div class="comment">
                <span>{{$comment->user->name}}</span>
                <span>-</span>
                <span>دو دقیقه قبل</span>
            </div>
            @auth
                <span class="btn btn-sm btn-primary" data-toggle="modal"
                      data-target="#sendComment" data-id="{{$comment->id}}">پاسخ به نظر</span>
            @endauth
        </div>
        <div class="card-body">
            <p class="card-text">{{$comment->comment}}</p>

             @include('layouts.comments',['comments'=>$comment->child])
        </div>
    </div>
@endforeach
آفلاین
user-avatar
حسام موسوی
3 ماه پیش

قدم به قدم باید در سمت frontend تست بگیرید ببینید سمت فرانت شما مشکلی نداشته باشه
مثلا بعد این خط با log کردن تست کنید مقداری برگشت داده میشه یا خیر

let parent_id = button.data('id');
console.log(parent_id)
آفلاین
user-avatar
reza ataei
3 ماه پیش

مهندس مقدار برگشتی تو log خالیه و مقداری نداره

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

چک کنید ایا کاربر لاگین شده دارید این دیگه مربوط به frontend میشه چک کنید قدم به قدم چرا خالی هست

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

دوست عزیز شما باید حتما در فایل ویوی مستر پروژه که layouts/app.blade.php هستش در انتهای تگ body که اسکریپت ها رو فراخونی کردید حتما yield شدن script رو بعد از تگ script که js/app.js رو فراخونی میکنه قرار بدید

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

سلام
استاد کدها از نظر کوئری زدن به دیتابیس نمیشه بهینه تر نوشت.الان فرض کنید برای یک محصول در صفحه تکی محصولات، در سطح اول(کامنت والد) 20 کامنت ثبت شده باشه و برای هر کامنت والد، n کامنت فرزند. هر بار رفرش صفحه باعث میشه 21 کوئری به دیتابیس زده بشه.یکبار برای واکشی کامنتهای والد و مجموعاً 20 کوئری برای واکشی کامنتهای فرزندان، والدها(در صورت وجود).روابط دیگر به اینها اضافه کنید مثل رابطه کامنت با کاربر و واکشی نام نویسنده کامنت و.... .این در پروژه و اپلیکیشن های بزرگ فشار زیادی به دیتابیس وارد می کنه.بغیر از کش کردن دیتاها، چطور میشه این مسئله رو هندل کرد؟

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

سعی میکنیم در یه جلسه این مورد رو هم توضیح بدیم.