69 lines
1.6 KiB
PHP
69 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire;
|
|
|
|
use App\Models\Blog;
|
|
use App\Models\Image;
|
|
use Livewire\Component;
|
|
use Livewire\Attributes\Layout;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class Images extends Component
|
|
{
|
|
public $images = [];
|
|
public $imagesblog = [];
|
|
|
|
public function mount()
|
|
{
|
|
$blogs = Blog::all();
|
|
foreach ($blogs as $blog) {
|
|
$this->checkImageMountForBlog($blog->id);
|
|
}
|
|
$this->images = $this->imagesblog;
|
|
}
|
|
|
|
public function checkImageMountForBlog($blogId)
|
|
{
|
|
$blog = Blog::find($blogId);
|
|
|
|
if (!$blog) {
|
|
return;
|
|
}
|
|
|
|
$imageName = $blog->image;
|
|
|
|
$content = $blog->content;
|
|
|
|
if (empty($content)) {
|
|
return;
|
|
}
|
|
|
|
$pattern = '/<img[^>]+src="([^">]+)"/i';
|
|
preg_match_all($pattern, $content, $matches);
|
|
$extractedImages = $matches[1] ?? [];
|
|
|
|
$extractedImages = array_map(function ($imageUrl) {
|
|
$parts = explode('/images/', $imageUrl);
|
|
return end($parts);
|
|
}, $extractedImages);
|
|
|
|
$extractedImages = array_filter($extractedImages, function ($image) {
|
|
return Storage::disk('public')->exists($image);
|
|
});
|
|
if ($imageName) {
|
|
if (Storage::disk('public')->exists($imageName)) {
|
|
$this->imagesblog[] = $imageName;
|
|
}
|
|
}
|
|
foreach ($extractedImages as $image) {
|
|
$this->imagesblog[] = $image;
|
|
}
|
|
}
|
|
|
|
#[Layout('components.layouts.panel.master')]
|
|
public function render()
|
|
{
|
|
return view('livewire.images');
|
|
}
|
|
}
|