前提・実現したいこと
Laravelで、独学でショッピングサイトを開発しています。
実現したいことは、商品の絞り込み検索ができるようにするため、画面左側にカテゴリー一覧をメニューとして表示させたいです。
ちなみに、このカテゴリー一覧は固定させて、他の画面に遷移してもカテゴリー一覧は表示させたままにします。
その為に、私が実装した内容としましては、
・view側に、親テンプレートと子テンプレートを用意
・子テンプレートには、カテゴリー表示やその他機能(商品詳細や商品購入などの機能)のテンプレートを用意
・親テンプレートは、子テンプレートを2つ呼ぶ(1つ目はカテゴリー表示、2つ目はその他機能)ようにする
上記内容で実装しています。
しかし問題がございまして、例えば商品一覧画面の場合、
親テンプレートから、商品一覧とカテゴリー表示する子テンプレートを呼び出す必要があるのですが、
商品一覧とカテゴリー表示は同じコントローラー内の別々のメソッドに記述しています。
しかし、商品一覧を表示するメソッドではreturnでテンプレートを呼び出すようにしているので、処理が終了します。
その為、どうしてもカテゴリー一覧のメソッドが呼び出せない状況です。
ここでお聞きしたいのですが、
・親テンプレートから、2つの子テンプレートを呼び出す方法(恐らく@yieldを使用すれば出来るはずなのですが、呼び出せない状況です)
・画面遷移しても、常にカテゴリー一覧のメソッドを呼び出し、カテゴリー一覧を表示する方法
上記2点について、方法をご教授頂ければ幸いです。**
尚、現状のソースコードを共有させて頂きます。
・コントローラー
class ShoppingController extends Controller { // 商品を一覧表示する public function index (){ $categorys = Category::all(); // 全件抽出 $products = Product::paginate(12); // 1ページに12件表示させる return view ('index', [ 'categorys' => $categorys, 'products' => $products, ]); } public function getCategorys(){ $categorys = Category::all(); // カテゴリー全件抽出 return view ('submenu', [ 'categorys' => $categorys, ]); } }
・ビュー①(親テンプレートで、ファイル名はdefault.blade.php)
※一部抜粋 <div class = 'container'> @yield('submenu') @yield('content') </div>
・ビュー②(子テンプレートで、ファイル名はindex.blade.php(商品一覧表示用))
※一部抜粋 @section('content') @if (isset ($products)) <div class = 'content'> @foreach ($products as $product) <figure class="imghvr-fade"> <img src="{{ $product->image }}" class="productImage"> <figcaption> カテゴリー:{{ $product->category->name }}<br/><br/> 商品名:{{ $product->name }}<br/><br/> 価格:{{ $product->price }}円 </figcaption> <a href="{{ action('ShoppingController@show', $product->id) }}"></a> </figure> @endforeach {{ $products->links() }} </div> @endif @endsection
・ビュー③(子テンプレートで、ファイル名はsubmenu.blade.php(カテゴリー一覧表示用))
@extends('layouts.default') @section('submenu') <div class = 'subMenu'> <div> カテゴリーから探す </div> <div> @if(isset ($categorys)) <ul> @foreach ($categorys as $category) <li>{{ $category->name }}</li> @endforeach </ul> @endif </div> </div> @endsection
ソースコードは以上となります。
どなたか回答のほど、何卒よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/10 11:31