Using sGallery in Blade Templates
This documentation provides a comprehensive guide on how to use sGallery
within your Blade templates for
retrieving and displaying images, videos, and other media from the sGallery module. We’ll cover everything
from displaying filtered collections to managing multiple galleries on a single page.
Display All Files with Image Filter
This example demonstrates how to display all files in a collection that are identified as images.
@foreach(sGallery::collections()->get() as $item)
@if(sGallery::hasImage($item->type))
<a class="swiper-slide" @if(trim($item->link)) href="{{$item->link}}" @endif>
<div class="container">
<img loading="lazy" class="intro__img" src="{{$item->src}}" alt="{{$item->alt}}" width="1440" height="456">
<div class="intro__inner">
<div class="h1__title">{{$item->title}}</div>
<p class="intro__text">{{$item->description}}</p>
@if(trim($item->link_text))
<div class="btn background__mod">{{$item->link_text}}</div>
@endif
</div>
</div>
</a>
@endif
@endforeach
Explanation:
sGallery::collections()->get()
retrieves all files in the gallery.sGallery::hasImage($item->type)
checks if the file type is an image.- The
img
tag useslazy loading
for better performance, especially with large images.
Display All Files with YouTube Filter
If you want to filter and display YouTube videos from your collection, use the following example:
@foreach(sGallery::collections()->get() as $item)
@if(sGallery::hasYoutube($item->type))
<div class="item">
<div class="video">
<iframe width="560" height="315" src="https://www.youtube.com/embed/{{$item->file}}" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<p>{{$item->title}}</p>
</div>
@endif
@endforeach
Explanation:
sGallery::hasYoutube($item->type)
filters out YouTube video files.- The
iframe
tag embeds the YouTube video into your page.
Display Product Gallery
To display all media files associated with a specific product, you can filter by documentId
and itemType
.
This is particularly useful for eCommerce or product catalog pages.
@foreach(sGallery::collections()->documentId($product->id)->itemType('product')->get() as $item)
<div class="swiper-slide">
<a class="js-trigger-fancybox" href="{{$item->src}}" data-fancybox="product-gallery">
<img loading="lazy" src="{{$item->src}}" width="440" height="440" />
</a>
</div>
@endforeach
Explanation:
documentId($product->id)
specifies the product’s ID, filtering the media files that belong to this specific product.itemType('product')
further filters files by type (in this case, “product”).- Files are displayed in a swiper slider, and clicking on an image opens a fancybox gallery.
Display First Product Image
If you only want to display the first media file from a product’s gallery (e.g., a cover image), use the eq(1)
method:
@php($item = sGallery::collections()->documentId($product->id)->itemType('product')->eq(1))
<img loading="lazy" src="{{$item->src}}" alt="{{$item->alt}}" width="440" height="440" />
Explanation:
eq(1)
retrieves the first item in the collection.- This is ideal for displaying a product cover image or a preview.
Display Product Cover with Full Filter
This example shows how to retrieve a specific file from a gallery by applying multiple filters, such as block name, language, and item type.
@php($item = sGallery::collections()->documentId($product->id)->itemType('product')->blockName('photo')->lang('en')->eq(1))
<img loading="lazy" src="{{$item->src}}" alt="{{$item->alt}}" width="440" height="440" />
Explanation:
blockName('photo')
specifies the gallery block (e.g., ‘photo’).lang('en')
filters the media based on the language, if needed.- The
eq(1)
method still retrieves the first item from the filtered collection.
Managing Multiple Galleries on the Same Page
If you need to display multiple galleries on a single page, use the blockName()
method to filter files for each
specific gallery block.
@foreach(sGallery::collections()->blockName('cinema')->get() as $item)
@if(sGallery::hasYoutube($item->type))
<lite-youtube videoid="{{$item->file}}"></lite-youtube>
@endif
@endforeach
Explanation:
blockName('cinema')
ensures that only the files belonging to the “cinema” block are shown.- This is useful when you have multiple media galleries on the same page, such as in a portfolio or multi-product page.
Example: Full-Parameter Image Slider for Products
Below is a more complex example showing how to form a product image slider using all available parameters in the sGallery system:
@foreach(sGallery::collections()->documentId($product->id)->itemType('product')->blockName('photo')->lang('en')->get() as $item)
@if(sGallery::hasImage($item->type))
<a class="swiper-slide" @if(trim($item->link)) href="{{$item->link}}" @endif>
<div class="container">
<img loading="lazy" class="intro__img" src="{{$item->src}}" alt="{{$item->alt}}" width="1440" height="456">
<div class="intro__inner">
<div class="h1__title">{{$item->title}}</div>
<p class="intro__text">{{$item->description}}</p>
@if(trim($item->link_text))
<div class="btn background__mod">{{$item->link_text}}</div>
@endif
</div>
</div>
</a>
@endif
@endforeach
Explanation:
- This example utilizes the
documentId()
,itemType()
,blockName()
, andlang()
filters to retrieve specific gallery files for a product. - The media is displayed in a swiper slider, complete with title, description, and optional link.