diff --git a/app/Plugins/User/Photoalbums/PhotoalbumsPlugin.php b/app/Plugins/User/Photoalbums/PhotoalbumsPlugin.php index 174e0dc69..f28efdb17 100644 --- a/app/Plugins/User/Photoalbums/PhotoalbumsPlugin.php +++ b/app/Plugins/User/Photoalbums/PhotoalbumsPlugin.php @@ -154,7 +154,10 @@ public function index($request, $page_id, $frame_id, $parent_id = null) } // カバー写真に指定されている写真 - $covers = PhotoalbumContent::whereIn('parent_id', $photoalbum_contents->where('is_folder', PhotoalbumContent::is_folder_on)->pluck('id'))->where('is_cover', PhotoalbumContent::is_cover_on)->get(); + $covers = PhotoalbumContent::whereIn('parent_id', $photoalbum_contents->where('is_folder', PhotoalbumContent::is_folder_on)->pluck('id')) + ->where('is_cover', PhotoalbumContent::is_cover_on) + ->with(['upload', 'posterUpload']) + ->get(); // 表示テンプレートを呼び出す。 return $this->view('index', [ @@ -375,7 +378,7 @@ private function isHiddenPhotoalbumContent(PhotoalbumContent $content, array $hi private function getSortedChildren(PhotoalbumContent $parent, ?string $sort_folder, ?string $sort_file, ?Collection $preloaded_children = null) { $children = is_null($preloaded_children) - ? $parent->children()->get() + ? $parent->children()->with(['upload', 'posterUpload'])->get() : $preloaded_children->get($parent->id, collect()); // 設定画面などで事前に読み込んだ子要素一覧を再利用し、追加クエリを避ける diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 3d850f778..29dec0dee 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -541,7 +541,19 @@ private function getPostBucketsRoles($buckets) return false; } - // return $buckets->getBucketsRoles(); + $request = app(Request::class); + $bucket_id = $buckets->id ?? null; + // GETは読み取り専用のため、同一リクエスト内キャッシュでSQLを減らしても整合性に影響しない。 + // POST系は同一リクエスト内で権限やバケツ設定が更新される可能性があるためキャッシュしない。 + if ($bucket_id && $request->isMethod('get')) { + static $cached_post_roles = []; + if (array_key_exists($bucket_id, $cached_post_roles)) { + return $cached_post_roles[$bucket_id]; + } + $cached_post_roles[$bucket_id] = $buckets->getPostArrayBucketsRoles(); + return $cached_post_roles[$bucket_id]; + } + return $buckets->getPostArrayBucketsRoles(); // // Buckets にrole がない場合などで、Buckets のrole を使用しない場合はfalse を返す。 diff --git a/resources/views/plugins/user/photoalbums/card/index_folder.blade.php b/resources/views/plugins/user/photoalbums/card/index_folder.blade.php index 615038da0..ba99602e2 100644 --- a/resources/views/plugins/user/photoalbums/card/index_folder.blade.php +++ b/resources/views/plugins/user/photoalbums/card/index_folder.blade.php @@ -28,6 +28,8 @@ id="cover_{{$loop->iteration}}" style="max-height: 200px; object-fit: scale-down; cursor:pointer; border-radius: 3px;" class="img-fluid" + loading="lazy" + decoding="async" > @else diff --git a/resources/views/plugins/user/photoalbums/default/index_folder.blade.php b/resources/views/plugins/user/photoalbums/default/index_folder.blade.php index b1265f75b..82a951163 100644 --- a/resources/views/plugins/user/photoalbums/default/index_folder.blade.php +++ b/resources/views/plugins/user/photoalbums/default/index_folder.blade.php @@ -30,6 +30,8 @@ id="cover_{{$loop->iteration}}" style="max-height: 200px; object-fit: scale-down; cursor:pointer; border-radius: 3px;" class="img-fluid" + loading="lazy" + decoding="async" > @else diff --git a/resources/views/plugins/user/photoalbums/default/index_image.blade.php b/resources/views/plugins/user/photoalbums/default/index_image.blade.php index d92ccfc70..7823910a3 100644 --- a/resources/views/plugins/user/photoalbums/default/index_image.blade.php +++ b/resources/views/plugins/user/photoalbums/default/index_image.blade.php @@ -20,9 +20,13 @@ $play_view_default = \App\Enums\PhotoalbumPlayviewType::play_in_list; $play_view = FrameConfig::getConfigValueAndOld($frame_configs, PhotoalbumFrameConfig::play_view, $play_view_default); $description_list_length = FrameConfig::getConfigValueAndOld($frame_configs, PhotoalbumFrameConfig::description_list_length); +$image_modal_id = 'photoalbum-image-modal-' . $frame_id; @endphp
@foreach($photoalbum_contents->where('is_folder', 0) as $photoalbum_content) + @php + $description_attr = str_replace(["\r\n", "\r", "\n"], '\\n', (string) $photoalbum_content->description); + @endphp
@if ($photoalbum_content->upload->is_image) @@ -30,39 +34,25 @@ - - @elseif ($photoalbum_content->isVideo($photoalbum_content->mimetype) && $play_view == PhotoalbumPlayviewType::play_in_detail) {{-- 動画:一覧はサムネイル画像のみで詳細画面で再生する --}} + class="img-fluid" + loading="lazy" + decoding="async"/> @elseif ($photoalbum_content->isVideo($photoalbum_content->mimetype)) {{-- 動画:一覧で再生する --}} @@ -129,4 +119,66 @@ class="img-fluid"
@endforeach
+ + + + @endif