Files
ahrommag/app/Livewire/Home/IndexPage.php
2025-11-16 12:43:07 +03:30

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);
}
}