diff --git a/app/Enums/SearchsFrameSelect.php b/app/Enums/SearchsFrameSelect.php new file mode 100644 index 000000000..166e535fc --- /dev/null +++ b/app/Enums/SearchsFrameSelect.php @@ -0,0 +1,27 @@ + + * @category サイト内検索 + * @package Enums + */ +final class SearchsFrameSelect extends EnumsBase +{ + // 定数メンバ + /** 全て表示する */ + const all_frames = 0; + /** 選択したものだけ表示する */ + const selected_only = 1; + + /** key/valueの連想配列 */ + const enum = [ + self::all_frames => '全て表示する', + self::selected_only => '選択したものだけ表示する', + ]; +} diff --git a/app/Enums/SearchsPageSelect.php b/app/Enums/SearchsPageSelect.php new file mode 100644 index 000000000..61151303a --- /dev/null +++ b/app/Enums/SearchsPageSelect.php @@ -0,0 +1,27 @@ + + * @category サイト内検索 + * @package Enums + */ +final class SearchsPageSelect extends EnumsBase +{ + // 定数メンバ + /** 全て表示する */ + const all_pages = 0; + /** ページ管理のメニュー表示条件に従う */ + const menu_visible_only = 1; + + /** key/valueの連想配列 */ + const enum = [ + self::all_pages => '全て表示する', + self::menu_visible_only => 'ページ管理のメニュー表示条件に従う', + ]; +} 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..f4b2ae56f 100644 --- a/app/Plugins/User/Searchs/SearchsPlugin.php +++ b/app/Plugins/User/Searchs/SearchsPlugin.php @@ -14,6 +14,8 @@ use App\Plugins\User\UserPluginBase; use App\Traits\ConnectCommonTrait; +use App\Enums\SearchsFrameSelect; +use App\Enums\SearchsPageSelect; use App\Enums\SearchsTargetPlugin; /** @@ -163,13 +165,13 @@ 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) { // フレームの選択が行われる場合 // 選択したものだけ表示する - if ($searchs_frame->frame_select == 1) { + if ($searchs_frame->frame_select == SearchsFrameSelect::selected_only) { $union_sql->whereIn('frames.id', explode(',', $searchs_frame->target_frame_ids)); } @@ -427,6 +429,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 +477,29 @@ 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 == SearchsPageSelect::menu_visible_only) { + // 表示ページのみをDBレベルで絞り込む + $pages = Page::where('base_display_flag', 1)->get(); + + // フレームの選択「選択したものだけ表示する」 + if ($searchs_frame->frame_select == SearchsFrameSelect::selected_only) { + // 選択したフレームに紐づくページ を追加取得してマージ + $pages_frame = Page::whereIn('id', function ($query) use ($searchs_frame) { + $query->select('page_id') + ->from('frames') + ->whereIn('id', explode(',', $searchs_frame->target_frame_ids)); + })->get(); + + $pages = $pages->merge($pages_frame)->unique('id'); + } + } else { + // 全ページを検索対象とする + $pages = Page::get(); + } + // 見れないページ除外 $visible_page_ids = []; foreach ($pages as $page) { diff --git a/database/migrations/2019_12_22_085641_create_searchs_table.php b/database/migrations/2019_12_22_085641_create_searchs_table.php index ab841662c..d9dba1256 100644 --- a/database/migrations/2019_12_22_085641_create_searchs_table.php +++ b/database/migrations/2019_12_22_085641_create_searchs_table.php @@ -1,5 +1,6 @@ integer('view_posted_name')->default('0'); $table->integer('view_posted_at')->default('0'); $table->text('target_plugins'); - $table->integer('frame_select')->default('0'); + $table->integer('frame_select')->default(SearchsFrameSelect::all_frames); $table->text('target_frame_ids')->nullable(); $table->timestamps(); }); 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..11b89189a --- /dev/null +++ b/database/migrations/2026_03_16_164135_add_select_page_from_searchs.php @@ -0,0 +1,33 @@ +integer('page_select')->default(SearchsPageSelect::all_pages)->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..245001bb4 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 @@ -5,6 +5,10 @@ * @copyright OpenSource-WorkShop Co.,Ltd. All Rights Reserved * @category 検索プラグイン --}} +@php +use App\Enums\SearchsFrameSelect; +use App\Enums\SearchsPageSelect; +@endphp @extends('core.cms_frame_base_setting') @section("core.cms_frame_edit_tab_$frame->id") @@ -147,32 +151,45 @@ +
+
+
+ @foreach (SearchsPageSelect::enum as $key => $item) +
+ @if(old('page_select', $searchs->page_select) == $key) + + @else + + @endif + +
+ @endforeach +
+
+
-
- @if(old('frame_select', $searchs->frame_select) == 0) - - @else - - @endif - -
-
- @if(old('frame_select', $searchs->frame_select) == 1) - - @else - - @endif - -
+ @foreach (SearchsFrameSelect::enum as $key => $item) +
+ @if(old('frame_select', $searchs->frame_select) == $key) + + @else + + @endif + +
+ @endforeach
- ※ 「選択したものだけ表示する」を選択した場合、「固定記事」は検索対象外になります。
+ + ※ 「選択したものだけ表示する」を選択した場合、「固定記事」は検索対象外になります。
+   また、メニュー非表示ページでも、選択したフレームは検索対象になります。
+