با سلام همونطور که مشخص هست من یک foreach گذاشتم تا به مشخصات بلاگ دسترسی داشته باشم اما طوری شده که مثلا 3 تا بلاگ درست میکنم
ویراش
نظرات تایید نشده
اخرین نظرات
نوشته های پیش رو
سه بار زیر هم مینویسه و 4 تا پست میشه 4 بار تکرار میکنه.
در حالی که من فقط یک بار میخوام اینها تو ساید بار دیده بشن.
از foreachهم استفاده نکردنی اصلا به اطلاعات نمیشه دسترسی پیدا کرد
@foreach(App\Models\Blog\Blog::all() as $blog)
<li><a href="{{route('blog.blogs.edit',['blog'=>$blog->id])}}"><span>❯</span>ویرایش </a></li>
<li><a href=""><span>❯</span>نظرات تایید نشده</a></li>
<li><a href=""><span>❯</span>آخرین نظرات</a></li>
<li><a href="{{route('blog.blogs.index')}}"><span>❯</span>نوشتههای پیشین</a></li>
@endforeach
همچنان کار نکرد.
تست که میکنم متد ارایه خالی برمیگردونه.
public function singlepost(Blog $blog){
return view('blog.singlepost', compact('blog'));
}
و هیچ چیز به ویو ارسال نمیشه مگر بیام از for each استفاده کنم.
روت
Route::get('morepost', [\App\Http\Controllers\Blog\BlogController::class, 'morepost'])->name('morepost');
Route::get('singlepost/{id}', [\App\Http\Controllers\Blog\BlogController::class, 'singlepost'])->name('singlepost');
کنترلر
public function morepost(Request $request,Blog $blog){
return view('blog.morepost',compact('blog'));
}
public function singlepost(Blog $blog){
return view('blog.singlepost', compact('blog'));
}
<a href="{{route('blog.singlepost', $blog->id)}}" class="btn btn-sm btn-primary ml-1">بیشتر</a>
من لیست کل پست ها رو دارم حتی با کلیک به روی "بیشتر" وارد ایدی مربوطه میشم.اما مساله اینجاست که اگر تو ویو سینگل از foreachاستفاده کنم دوباره کل پست ها رو میاره و اگر از foreachاستفاده نکنم کلا هیچ کدوم از پست ها رو نشون نمیده.
این که داره به تعداد بلاگ ها تکرار میشه یه چیز طبیعیه، چون شما داری به تعداد بلاگ ها این حلقه رو پیمایش میکنی.
شما نباید حلقه رو داخل ساید بار بذارید، شما یه روت index دارین واسه نمایش بلاگ ها درسته؟ اگه جواب بله هست، کد زیر میشه لینکی برای نمایش کل بلاگ ها پس شما کد زیر رو بدون حلقه بذار داخل ساید بار:
<li><a href="{{route('blog.blogs.index')}}"><span>❯</span>نوشتههای پیشین</a></li>
حالا باید داخل این صفحه مثلا یه table داشته باشی که کل بلاگ ها رو نشون بده و حلقه رو اینجا بذاری.
موفق باشید.
نه ببینید بخوام واضح بگم به این شکل هست که من میخوام به id edit دسترسی داشته باشم برای دسترسی به idوقتی میام از foreachاستفاده میکنم بسته به تعداد بلاگ هام چندین گینه ویرایش زیر هم میاره که هر کدوم به یک بلاگ ربط داره
وقتی هم از foreachاستفاده نمیکنم اصلا $blog رو نمیشناسه.
@foreach(App\Models\Blog\Blog::all() as $blog)
<li><a href="{{route('blog.blogs.edit',['blog'=>$blog->id])}}"><span>❯</span>ویرایش </a></li>
@endforeach
من که به بلیدها نگاه میکنم میبینم گاهی بدون هیچ foreach به یک فیلد دسترسی پیدا میکنند و نمیدونم چطور همچین ممکنه
.
فعلا برای اینکه قسمت ساید بارم شلوغ نشه اخرین سطر رو گرفتم که اخرین بلاگ رو نشون بده.
@foreach(App\Models\Blog\Blog::all() as $blog)
@if($loop->last)
<li><a href="{{route('blog.blogs.edit',['blog'=>$blog->id])}}"><span>❯</span>ویرایش </a></li>
@endif
@endforeach
آقای جهانگیر واقعا ممنونم از پیگیری شما.
من تو استفاده از متغییرها تو بلید به مساله میخورم که یک چیز برام قابل فهم نیست
ببینید من کلی پست دارم که با این شکل همشون رو به من نشون میده.
روت:
Route::get('morepost', [\App\Http\Controllers\Blog\BlogController::class, 'morepost'])->name('morepost');
کنترلر
public function morepost(Request $request,Blog $blog){
return view('blog.morepost',compact('blog'));
}
ویو
@extends('blog.master')
@section('content')
@foreach(App\Models\Blog\Blog::all() as $blog)
<div class="container mb-2">
<div class="row justify-content-center">
<div class="col-md-12">
<div class="card">
<div class="card-header">
{{$blog->title}}
</div>
<div class="card-body">
{{$blog->body}}
</div>
</div>
</div>
</div>
<div class="row">
<a href="{{route('blog.singlepost',['blog'=>$blog->id])}}" class="btn btn-sm btn-primary ml-1">بیشتر</a>
</div>
</div>
@endforeach
@endsection
حالا من میخوام وقتی روی بیشتر زدم وارد فقط یک بلاگ بشه.
مساله من دقیقا اینجا هست که من تو صفحه سینگل پست نمیتونم از متغیرها استفاده کنم مگر اینکه از foreach استفاده میکنم که کل پست ها رو برام میاره که من اینو نمیخوام.هرجا هم نگاه میکنم اصلا از foreach استفاده نمیکنند و مستقیم به مثلا $blog دسترسی دارند.من باید از چه راهی برم.
راه اشتباه من به شکل زیر هست.
روت
Route::get('singlepost', [\App\Http\Controllers\Blog\BlogController::class, 'singlepost'])->name('singlepost');
کنترلر
public function singlepost(Request $request,Blog $blog){
return view('blog.singlepost');
}
@extends('blog.master')
@section('content')
@foreach(App\Models\Blog\Blog::all() as $blog)
<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">×</span>
</button>
</div>
<form action="{{route('send.comment')}}" method="post" id="sendCommentForm">
@csrf
<div class="modal-body">
<input type="hidden" name="commentable_id" value="{{$blog->id}}">
<input type="hidden" name="commentable_type" value="{{get_class($blog)}}">
<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>
<div class="container">
<div class="row justify-content-center">
<div class="col-md-12">
<div class="card">
<div class="card-header">
{{$blog->title}}
</div>
<div class="card-body">
{{$blog->body}}
</div>
</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="d-flex align-items-center justify-content-between">
<h4 class="mt-4">بخش نظرات</h4>
@auth
<span class="btn btn-sm btn-primary" data-toggle="modal" data-target="#sendComment" data-id="0">ثبت نظر جدید</span>
@endauth
</div>
@guest
<div class="alert alert-warning">برای ثبت نظر لطفا وارد سایت شوید.</div>
@endguest
@include('layouts.comments',['comments'=>$blog->comments()->where('parent_id',0)->get()])
</div>
</div>
</div>
@endforeach
@endsection
اگر فقط اینکه من چطور بدون استفاده از foreach دسترسی داشته باشم رو بفرمایید مشکل من تو بلیدها خیلی حل میشه
کد شما به شدت کثیف و دلیلش هم اصولی یاد نگرفتن هست، هدف من کمک به شما و امثال شماست، خدایی نکرده قصد بی احترامی ندارم ولی با این روش جلو رفتن نتیجه ای حاصل نمی شود.
و اما جواب شما:
لینک بیشتر رو به صورت زیر بنویسید:
<a href="{{route('singlepost', $blog->id)}}" class="btn btn-sm btn-primary ml-1">بیشتر</a>
روت:
Route::get('singlepost/{blog}', [\App\Http\Controllers\Blog\BlogController::class, 'singlepost'])->name('singlepost');
کنترلر:
public function singlepost(Blog $blog){
return view('blog.singlepost', compact('blog'));
}
حالا بدون foreach استفاده کنید.
موفق باشید.
همچنان کار نکرد.
تست که میکنم متد ارایه خالی برمیگردونه.
public function singlepost(Blog $blog){
return view('blog.singlepost', compact('blog'));
}
و هیچ چیز به ویو ارسال نمیشه مگر بیام از for each استفاده کنم.
روت
Route::get('morepost', [\App\Http\Controllers\Blog\BlogController::class, 'morepost'])->name('morepost');
Route::get('singlepost/{id}', [\App\Http\Controllers\Blog\BlogController::class, 'singlepost'])->name('singlepost');
کنترلر
public function morepost(Request $request,Blog $blog){
return view('blog.morepost',compact('blog'));
}
public function singlepost(Blog $blog){
return view('blog.singlepost', compact('blog'));
}
<a href="{{route('blog.singlepost', $blog->id)}}" class="btn btn-sm btn-primary ml-1">بیشتر</a>
من لیست کل پست ها رو دارم حتی با کلیک به روی "بیشتر" وارد ایدی مربوطه میشم.اما مساله اینجاست که اگر تو ویو سینگل از foreachاستفاده کنم دوباره کل پست ها رو میاره و اگر از foreachاستفاده نکنم کلا هیچ کدوم از پست ها رو نشون نمیده.
اصلا تغییر نکرد
فکر کنم یک سر به بیابون باید بزنم
این شاید خیلی به کار بیاد
GET|HEAD blog/morepost ........................................................................................................... blog.morepost › Blog\BlogController@morepost
GET|HEAD blog/singlepost/{id} ................................................................................................ blog.singlepost › Blog\BlogController@singlepost
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟