diff --git a/app/Models/User/Searchs/Searchs.php b/app/Models/User/Searchs/Searchs.php index 653311487..a662b3ba8 100644 --- a/app/Models/User/Searchs/Searchs.php +++ b/app/Models/User/Searchs/Searchs.php @@ -21,7 +21,7 @@ class Searchs extends Model 'frame_select', 'target_frame_ids', 'recieve_keyword', - 'narrow_down_label', + 'page_select', ]; /** diff --git a/app/Plugins/User/Searchs/SearchsPlugin.php b/app/Plugins/User/Searchs/SearchsPlugin.php index 28c83a0d3..ab25d7ae0 100644 --- a/app/Plugins/User/Searchs/SearchsPlugin.php +++ b/app/Plugins/User/Searchs/SearchsPlugin.php @@ -163,7 +163,7 @@ private function searchContents($request, $searchs_frame, $method = null, $narro // 各プラグインのSQL をUNION // 公開されているページ、フレームを検索対象とする - $searchable_page_ids = $this->fetchSearchablePageIds($request); + $searchable_page_ids = $this->fetchSearchablePageIds($request, $searchs_frame); $searchable_frame_ids = Frame::visible()->get()->pluck('id'); foreach ($union_sqls as $union_sql) { @@ -427,6 +427,7 @@ public function saveBuckets($request, $page_id, $frame_id, $id = null) $searchs->frame_select = intval($request->frame_select); $searchs->target_frame_ids = empty($request->target_frame_ids) ? "": implode(',', $request->target_frame_ids); $searchs->recieve_keyword = intval($request->recieve_keyword); + $searchs->page_select = intval($request->page_select); // データ保存 $searchs->save(); @@ -474,9 +475,28 @@ public function changeBuckets($request, $page_id = null, $frame_id = null, $id = /** * 検索対象のページIDを取得する */ - private function fetchSearchablePageIds($request) + private function fetchSearchablePageIds($request, $searchs_frame) { $pages = Page::get(); + + // ページの選択「ページ管理のメニュー表示条件に従う」 + if ($searchs_frame->page_select == 1) { + + // 表示ページのみに絞る + $pages = $pages->filter(function ($page) { + return $page->base_display_flag == 1; + }); + + // フレームの選択「選択したものだけ表示する」 + if ($searchs_frame->frame_select == 1) { + // 選択したフレームに紐づくページ を追加取得してマージ + $frame_page_ids = Frame::whereIn('frames.id', explode(',', $searchs_frame->target_frame_ids))->get()->pluck('page_id')->toArray(); + $pages_frame = Page::whereIn('pages.id', $frame_page_ids)->get(); + + $pages = $pages->merge($pages_frame)->unique('id'); + } + } + // 見れないページ除外 $visible_page_ids = []; foreach ($pages as $page) { diff --git a/database/migrations/2026_03_16_164135_add_select_page_from_searchs.php b/database/migrations/2026_03_16_164135_add_select_page_from_searchs.php new file mode 100644 index 000000000..cd23af26e --- /dev/null +++ b/database/migrations/2026_03_16_164135_add_select_page_from_searchs.php @@ -0,0 +1,32 @@ +integer('page_select')->default(0)->comment('ページの選択フラグ')->after('recieve_keyword'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('searchs', function (Blueprint $table) { + $table->dropColumn('page_select'); + }); + } +} diff --git a/resources/views/plugins/user/searchs/default/searchs_edit_search.blade.php b/resources/views/plugins/user/searchs/default/searchs_edit_search.blade.php index 9ac2c4be8..cb8707028 100644 --- a/resources/views/plugins/user/searchs/default/searchs_edit_search.blade.php +++ b/resources/views/plugins/user/searchs/default/searchs_edit_search.blade.php @@ -147,6 +147,28 @@ +
+
+
+
+ @if(old('page_select', $searchs->page_select) == 0) + + @else + + @endif + +
+
+ @if(old('page_select', $searchs->page_select) == 1) + + @else + + @endif + +
+
+
+
@@ -172,7 +194,10 @@
- ※ 「選択したものだけ表示する」を選択した場合、「固定記事」は検索対象外になります。
+ + ※ 「選択したものだけ表示する」を選択した場合、「固定記事」は検索対象外になります。
+   また、メニュー非表示ページでも、選択したフレームは検索対象になります。
+