مهدی
4 سال پیش توسط مهدی مطرح شد
3 پاسخ

مدیریت کامنت ها و ثبت کامنت و پاسخ بی نهایت

با سلام
من یک CMS با لاراول پیاده سازی کردم، در قسمت وبلاگ این CMS من اومدم و کامنت هام رو اینطوری مدیریت می کنم:

  • اگرکامنت از طریق فرم ثبت بشه که خب میره تو دیتابیس و میشه کامنتی که بدون parent هست یعنی آیدی parent رو 0 میگیرم.
    • اگر روی دکمه پاسخ به کامنت کلیک بشه، آیدی کامنتی که روش کلیک شده بدست میاد (با js) و در یک input مخفی قرار میگیره و به همراه فرم ارسال میشه یعنی در این حالت parent id وجود داره

حالا من فقط یک سطح پاسخ رو در نظر گرفتم یعنی فقط برای یک کامنت که parent id نداره پاسخ ثبت میکنم و برای بقیه نه، دلیل اینکارمم مشکل در نمایش کامنت بود.
حالا چطوری کامنت رو نمایش میدم؟
وقتی که دارم پست رو دریافت میکنم با استفاده از دوتا حلقه foreach کامنت و پاسخ هاش رو لود میکنم، به صورت زیر:

<div class="padd-box-sm">
            <ol class="comment-list clear-list">
                @foreach($post[4] as $comment)
                    <li class="comment" id="{{'comment_'.$comment->id}}">
                        <article class="comment-body">
                            <header class="comment-header">
                                <div class="comment-author vcard">
                                    <img alt="author-image" src="{{Avatar::create($comment->author)->toBase64()}}"
                                         class="avatar avatar-58 photo" height="58" width="58">
                                    <strong class="fn">{{$comment->author}}</strong>
                                </div>

                                <div class="comment-date">
                                    در
                                    <time datetime="2016-07-04T11:33:08+00:00">{{$comment->created_at}}</time>
                                </div>
                            </header>

                            <div class="comment-content clear-mrg">
                                {{$comment->content}}
                            </div>

                            <footer class="comment-footer">
                                @if(!$comment->replies->isEmpty())
                                    <div class="comment-replys-count">
                                        <a rel="nofollow" class="comment-replys-link" href="#">{{'مشاهده '.$comment->replies->count().' پاسخ'}}</a>
                                    </div>
                                @endif
                                <div class="comment-links">
                                    <a href="#reply-to-comment" class="comment-reply-link" id="{{$comment->id}}">پاسخ</a>
                                </div>
                            </footer>
                        </article>

                        @if($comment->replies)
                            <ol class="children clear-list">
                                @foreach($comment->replies as $reply)
                                    <li class="comment">
                                        <article class="comment-body">
                                            <header class="comment-header">
                                                <div class="comment-author vcard">
                                                    <img alt="author-image" src="{{Avatar::create($reply->author)->toBase64()}}"
                                                         class="avatar avatar-58 photo" height="58" width="58">
                                                    <strong class="fn">{{$reply->author}}</strong>
                                                </div>

                                                <div class="comment-date">
                                                    در
                                                    <time datetime="2016-07-04T11:33:08+00:00">{{$reply->created_at}}</time>
                                                </div>
                                            </header>

                                            <div class="comment-content clear-mrg">
                                                {{$reply->content}}
                                            </div>
                                        </article>
                                    </li>
                                @endforeach
                            </ol>
                        @endif
                    </li>
                @endforeach
            </ol>
        </div>

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


ثبت پرسش جدید
محمد امیری
تخصص : backend coder
@mohammadeng3731 4 سال پیش آپدیت شد
2

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

  @include('Admin.categories.categoriesListsLoop',['categories'=>$parents])

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

<ul class="loopUl"
    style="border-right: 1px solid rgb({{rand(0,255)}},{{rand(0,255)}},{{rand(0,255)}})">
    @foreach($categories as $item)

        <li>
            <span class="deleteButton" @click="deleteCategory({{$item->id}})">
                حذف
                <i class="icon-trash"></i>
            </span>
            <span @click="showEditModal('{{$item->title}}',{{$item->id}})" class="editButton">
                <i class="icon-edit"></i>
                ویرایش </span>
            @if($item->attributes()->count())
                <span @click="showAttributes({{$item->id}},'{{$item->title}}')" class="showAttributes">
مشاهده مشخصه ها
                <i class="icon-eye"></i>
            </span>
            @endif
            <small>
                {{$item->title}}
            </small>

        </li>

        @include('Admin.categories.categoriesListsLoop',['categories'=>$item->children])
    @endforeach

</ul>

یعنی داخل خود فایل خودشو صدا بزنید ولی با این تفاوت که فرزندان اون دسته بندی رو اینبار بهش پاس بدید.


مهدی
تخصص : برنامه نویس و طراح وب
@mrmmg 4 سال پیش مطرح شد
0

@mohammadeng3731
رابطه polymorph هیچ کمکی نمیکنه؟


محمد امیری
تخصص : backend coder
@mohammadeng3731 4 سال پیش مطرح شد
2

این موضوع ارتباطی به روابط polymorphic. نداره. شما یه مدل دارید و از همون واکشی میکنید و نیازی به morph نیست


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

ورود یا ثبت‌نام