57 lines
1.5 KiB
PHP
57 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Home;
|
|
|
|
use App\Models\Blog;
|
|
use App\Models\Category;
|
|
use Livewire\Attributes\Layout;
|
|
use Livewire\Attributes\Session;
|
|
use Livewire\Component;
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
#[Layout('components.layouts.home.master')]
|
|
class IndexPage extends Component
|
|
{
|
|
public $blogs;
|
|
public $categories;
|
|
public $like_status;
|
|
|
|
public function mount()
|
|
{
|
|
// استفاده از Cache برای کاهش Query های سنگین
|
|
$this->blogs = Cache::remember('home_blogs', 60, function() {
|
|
return Blog::query()
|
|
->where('status', 1)
|
|
->where('notBlog', null)
|
|
->whereHas('category', function ($q) {
|
|
$q->where('status', 1);
|
|
})
|
|
->paginate(10); // 10 مطلب در هر صفحه
|
|
});
|
|
|
|
$this->categories = Category::where('status', 1)->get();
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
// دیگر نیازی به اجرای دوباره Query در render نیست
|
|
return view('livewire.home.index-page', [
|
|
'blogs' => $this->blogs
|
|
]);
|
|
}
|
|
|
|
public function like($id)
|
|
{
|
|
$this->like_status = session()->get('blog-' . $id);
|
|
|
|
if ($this->like_status == 'dislike') {
|
|
Blog::where('id', $id)->increment('likes');
|
|
} else {
|
|
Blog::where('id', $id)->decrement('likes');
|
|
}
|
|
|
|
$sesion_value = $this->like_status == 'like' ? 'dislike' : 'like';
|
|
session()->put('blog-' . $id, $sesion_value);
|
|
}
|
|
}
|