contao-components/swiper
Contao integration for Swiper.js, providing a ready-to-use slider/carousel component. Adds Swiper assets and configuration to Contao so you can build responsive, touch-friendly sliders with minimal setup.
Installation
composer require contao-components/swiper
Ensure swiper is included in your resources/js/app.js (or equivalent):
import Swiper from 'swiper';
Basic Usage Add the Swiper CSS and JS to your Laravel Blade template:
@vite(['resources/css/swiper.css', 'resources/js/app.js'])
Initialize Swiper in a container:
<div class="swiper">
<div class="swiper-wrapper">
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
</div>
</div>
First Use Case
Use the Swiper class to initialize a simple slider:
document.addEventListener('DOMContentLoaded', () => {
new Swiper('.swiper', {
loop: true,
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
});
Dynamic Content Loading Fetch slides via AJAX and update Swiper dynamically:
const swiper = new Swiper('.swiper');
fetch('/api/slides')
.then(response => response.json())
.then(slides => {
slides.forEach(slide => {
const slideEl = document.createElement('div');
slideEl.className = 'swiper-slide';
slideEl.innerHTML = slide.content;
swiper.slides[0].appendChild(slideEl);
swiper.update();
});
});
Laravel Blade Integration Pass Swiper configuration from Laravel to JavaScript:
<script>
const swiperConfig = @json([
'loop' => true,
'autoplay' => ['delay' => 3000],
]);
</script>
Use in JS:
new Swiper('.swiper', swiperConfig);
Reusable Components Create a Vue/React wrapper for Swiper:
<template>
<div class="swiper">
<div class="swiper-wrapper">
<div v-for="slide in slides" class="swiper-slide">{{ slide }}</div>
</div>
</div>
</template>
<script>
import Swiper from 'swiper';
export default {
mounted() {
new Swiper(this.$el.querySelector('.swiper'), {
slidesPerView: 3,
});
},
};
</script>
swiper-slide) alongside Tailwind for styling.Initialization Timing
DOMContentLoaded or mounted() in frameworks.swiper.update().CSS Conflicts
.swiper-slide {
@apply block; /* Example Tailwind override */
}
Lazy Loading
lazy: true for performance, but ensure images are preloaded if critical:
new Swiper('.swiper', {
lazy: {
loadOnTransitionStart: true,
loadPrevNext: true,
},
});
swiper/pagination):
import Swiper from 'swiper';
import 'swiper/modules/pagination'; // Explicitly import modules
swiper.on('breakpoint', () => console.log(swiper)) to debug responsive behavior.Custom Modules Extend Swiper with custom modules:
const customModule = {
name: 'custom',
params: {
customOption: {
default: false,
},
},
on: {
init: function() {
if (this.params.customOption) {
console.log('Custom option enabled!');
}
},
},
};
Swiper.use([customModule]);
Laravel Service Provider Bind Swiper to Laravel’s container for dependency injection:
// app/Providers/AppServiceProvider.php
public function register()
{
$this->app->singleton(Swiper::class, function() {
return new Swiper('.swiper', config('swiper.defaults'));
});
}
Configuration Management
Centralize Swiper settings in config/swiper.php:
return [
'defaults' => [
'loop' => env('SWIPER_LOOP', false),
'autoplay' => ['delay' => 3000],
],
];
How can I help you explore Laravel packages today?