es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Necesito mostrar los productos por categoría en la página de la tienda del vendedor en Laravel 8.

Necesito mostrar los productos por categoría en la página de la tienda del vendedor en Laravel 8. Mostrar la categoría si el producto del vendedor está dentro de la categoría; de lo contrario, no mostrar la categoría.

Mi archivo blade:

<div class="text-center mb-4">
    <h3 class="h3 fw-600 border-bottom">
        <span class="border-bottom border-primary border-width-2 pb-3 d-inline-block">{{ translate('Categorías')}}</span>
    </h3>
</div>
<div class="row">
    <div class="col">
        <div class="aiz-carousel gutters-10" data-items="5">
            @foreach ($categories as $product)
                <div class="carousel-box">
                    <div class="aiz-card-box border border-light rounded hov-shadow-md mt-1 mb-2 has-transition bg-white">
                        <div class="position-relative">
                            <a href="{{ route('shop.visit', $shop->slug.'/products/'.$product->slug) }}" class="d-block">
                                <img class="img-fit lazyload mx-auto h-140px h-md-210px" src="{{ static_asset('assets/img/placeholder.jpg') }}" data-src="{{ uploaded_asset($product->banner) }}" alt="{{  $product->getTranslation('name')  }}" onerror="this.onerror=null;this.src='{{ static_asset('assets/img/placeholder.jpg') }}';">
                            </a>
                        </div>
                        <div class="p-md-3 p-2 text-left">
                            <h3 class="fw-600 fs-13 text-truncate-2 lh-1-4 mb-0 h-35px">
                                <a href="{{ route('shop.visit', $shop->slug.'/products/'.$product->slug) }}" class="d-block text-reset">{{  $product->getTranslation('name')  }}</a>
                            </h3>
                        </div>
                    </div>
                </div>
            @endforeach
        </div>
    </div>
</div>

Si necesitas más información sobre el código, avísame.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para mostrar los productos clasificados por categorías en la página de la tienda del vendedor en Laravel 8, podemos seguir los siguientes pasos:

    1. Primero, necesitamos obtener todas las categorías de los productos del vendedor. Esto lo podemos hacer usando el siguiente código:
      $categories = $seller->products()->groupBy('category_id')->pluck('category_id');
      

      Aquí, $seller es una instancia del modelo de vendedor, y estamos obteniendo todos los IDs de categoría distintos de los productos del vendedor.

    2. A continuación, necesitamos iterar a través de las categorías y verificar si el vendedor tiene algún producto en esa categoría. Si es así, mostraremos esa categoría; de lo contrario, la omitiremos. Podemos usar el siguiente código:

      @foreach ($categories as $categoryId)
         @php
             $category = \App\Models\Category::find($categoryId);
             $categoryProducts = $seller->products()->where('category_id', $categoryId)->get();
         @endphp
      
         @if ($category && $categoryProducts->count() > 0)
             <div class="text-center mb-4">
                 <h3 class="h3 fw-600 border-bottom">
                     <span class="border-bottom border-primary border-width-2 pb-3 d-inline-block">{{ $category->name }}</span>
                 </h3>
             </div>
      
             <div class="row">
                 <div class="col">
                     <div class="aiz-carousel gutters-10" data-items="5">
                         @foreach ($categoryProducts as $product)
                             <div class="carousel-box">
                                 <div class="aiz-card-box border border-light rounded hov-shadow-md mt-1 mb-2 has-transition bg-white">
                                     <div class="position-relative">
                                         <a href="{{ route('shop.visit', $shop->slug.'/products/'.$product->slug) }}" class="d-block">
                                             <img class="img-fit lazyload mx-auto h-140px h-md-210px" src="{{ static_asset('assets/img/placeholder.jpg') }}" data-src="{{ uploaded_asset($product->banner) }}" alt="{{ $product->getTranslation('name') }}" onerror="this.onerror=null;this.src='{{ static_asset('assets/img/placeholder.jpg') }}';">
                                         </a>
                                     </div>
                                     <div class="p-md-3 p-2 text-left">
                                         <h3 class="fw-600 fs-13 text-truncate-2 lh-1-4 mb-0 h-35px">
                                             <a href="{{ route('shop.visit', $shop->slug.'/products/'.$product->slug) }}" class="d-block text-reset">{{ $product->getTranslation('name') }}</a>
                                         </h3>
                                     </div>
                                 </div>
                             </div>
                         @endforeach
                     </div>
                 </div>
             </div>
         @endif
      @endforeach
      

      Aquí, estamos iterando a través de las categorías, y para cada categoría, estamos verificando si el vendedor tiene algún producto en esa categoría. Si es así, mostramos esa categoría y sus productos utilizando el archivo blade que proporcionaste en tu pregunta. Si el vendedor no tiene productos en esa categoría, omitiremos esa categoría.

      Ten en cuenta que estamos utilizando los métodos de relación de Eloquent para obtener los productos y categorías del vendedor. Es posible que necesites ajustar el código de acuerdo a tu esquema de base de datos y configuración de relaciones.

      Además, estamos utilizando la directiva @php para escribir algo de código PHP dentro del archivo blade. Aunque generalmente no se recomienda hacer esto, a veces es necesario realizar algún procesamiento de datos en el archivo de vista. Si no deseas usar la directiva @php, puedes mover el código PHP a tu controlador o clase de servicio y pasar las variables necesarias al archivo blade.

Comments are closed.