diff --git a/app/Http/Controllers/Admin/NewsController.php b/app/Http/Controllers/Admin/NewsController.php index 6af4b4e..bf639e4 100644 --- a/app/Http/Controllers/Admin/NewsController.php +++ b/app/Http/Controllers/Admin/NewsController.php @@ -61,11 +61,29 @@ class NewsController extends Controller if ($request->filled('from')) { $q->where('open_datetime','>=',$request->input('from')); } if ($request->filled('to')) { $q->where('open_datetime','<=',$request->input('to')); } - // 並び順:公開日時の降順 → 主キー降順 - $rows = $q->orderByDesc('open_datetime') - ->orderByDesc($this->pk) - ->paginate(20) - ->withQueryString(); + // {追加} 並び替え(ホワイトリスト) + $sort = (string)$request->query('sort', ''); + $dir = strtolower((string)$request->query('dir', 'desc')); + $dir = in_array($dir, ['asc','desc'], true) ? $dir : 'desc'; + + // 画面キー → 実カラム + $sortable = [ + 'id' => $this->pk, // ニュースID + 'news' => 'news', // ニュース内容 + 'open_datetime' => 'open_datetime', // 公開日時 + 'mode' => 'mode', // 表示モード + ]; + + if (isset($sortable[$sort])) { + $q->orderBy($sortable[$sort], $dir); + } else { + // 既定:公開日時降順 → 主キー降順 + $q->orderByDesc('open_datetime') + ->orderByDesc($this->pk); + } + + // ページング(現在のクエリを維持) + $rows = $q->paginate(20)->appends($request->except('page')); return view('admin.news.list', compact('rows')); } @@ -76,21 +94,29 @@ class NewsController extends Controller public function add(Request $request) { if ($request->isMethod('post')) { - // 入力チェック + $messages = [ + 'required' => ':attribute は、必ず入力してください。', + 'open_datetime.date_format' => '公開日時は :format 形式(YYYY-MM-DD HH:MM:SS)で入力してください。', + ]; + $attributes = [ + 'news' => 'ニュース内容', + 'open_datetime' => '公開日時', + 'mode' => '表示モード', + ]; $v = $request->validate([ 'news' => 'required|string', - 'open_datetime' => 'nullable|date_format:Y-m-d H:i:s', + 'open_datetime' => 'required|date_format:Y-m-d H:i:s', 'link_url' => 'nullable|string|max:255', 'image1_filename' => 'nullable|string|max:255', 'image2_filename' => 'nullable|string|max:255', 'mode' => 'required|integer|min:0|max:9', - ]); + ], $messages, $attributes); // 登録 $now = now(); DB::table($this->table)->insert([ 'news' => $v['news'], - 'open_datetime' => $v['open_datetime'] ?? null, + 'open_datetime' => $v['open_datetime'], 'link_url' => $v['link_url'] ?? null, 'image1_filename' => $v['image1_filename'] ?? null, 'image2_filename' => $v['image2_filename'] ?? null, @@ -118,20 +144,28 @@ class NewsController extends Controller if (!$news) { abort(404); } if ($request->isMethod('post')) { - // 入力チェック + $messages = [ + 'required' => ':attribute は、必ず入力してください。', + 'open_datetime.date_format' => '公開日時は :format 形式(YYYY-MM-DD HH:MM:SS)で入力してください。', + ]; + $attributes = [ + 'news' => 'ニュース内容', + 'open_datetime' => '公開日時', + 'mode' => '表示モード', + ]; $v = $request->validate([ 'news' => 'required|string', - 'open_datetime' => 'nullable|date_format:Y-m-d H:i:s', + 'open_datetime' => 'required|date_format:Y-m-d H:i:s', 'link_url' => 'nullable|string|max:255', 'image1_filename' => 'nullable|string|max:255', 'image2_filename' => 'nullable|string|max:255', 'mode' => 'required|integer|min:0|max:9', - ]); + ], $messages, $attributes); // 更新 DB::table($this->table)->where($this->pk, $id)->update([ 'news' => $v['news'], - 'open_datetime' => $v['open_datetime'] ?? null, + 'open_datetime' => $v['open_datetime'], 'link_url' => $v['link_url'] ?? null, 'image1_filename' => $v['image1_filename'] ?? null, 'image2_filename' => $v['image2_filename'] ?? null, diff --git a/resources/views/admin/news/add.blade.php b/resources/views/admin/news/add.blade.php index 2a94363..44abcf5 100644 --- a/resources/views/admin/news/add.blade.php +++ b/resources/views/admin/news/add.blade.php @@ -6,12 +6,12 @@