Installation
composer require contao-thememanager/ctm-accordion
Ensure your Laravel project is using Contao Manager (if applicable) or manually include the package in composer.json.
Publish Assets Run:
php artisan vendor:publish --provider="ContaoThememanager\CtmAccordion\CtmAccordionServiceProvider" --tag=public
This copies JS/CSS to public/vendor/ctm-accordion/.
Basic Usage Add the accordion to a Contao template via:
{{ Contao\Thememanager\CtmAccordion::render('accordion_id', [
'items' => [
['title' => 'Section 1', 'content' => 'Content 1'],
['title' => 'Section 2', 'content' => 'Content 2'],
],
]) }}
First Use Case
items array to populate accordion entries from a database (e.g., FaqEntry model).Database-Driven Accordions Fetch data from Laravel models and pass to the accordion:
$faqItems = FaqEntry::where('active', 1)->get()->map(function ($item) {
return [
'title' => $item->question,
'content' => $item->answer,
'icon' => $item->icon ?? null,
];
});
Frontend Templating
Extend Contao’s PageRegular template to include the accordion:
{% block content %}
{{ Contao\Thememanager\CtmAccordion::render('faq-accordion', {
'items': faqItems|json_encode
}) }}
{% endblock %}
Dynamic Loading (AJAX) Use Laravel routes to fetch accordion items via AJAX:
Route::get('/accordion/items/{id}', [AccordionController::class, 'getItems']);
// Fetch and update accordion dynamically
$.get(`/accordion/items/${accordionId}`, (data) => {
$('#accordion-container').html(data);
});
Thememanager Integration
tl_theme table.ctm_accordion element in Contao’s Page Builder for drag-and-drop placement.Asset Loading Conflicts
public/vendor/ctm-accordion/ for missing files after updates.Contao Dependency
Template Caching
tl_cache table) or run:
php artisan contao:cache:clear
after changes to accordion templates.JavaScript Errors
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="{{ asset('vendor/ctm-accordion/js/accordion.js') }}"></script>
Custom Styling
Override CSS via Contao’s tl_style or a custom SCSS file:
.ctm-accordion {
.accordion-header {
background: #f0f0f0;
}
}
Multi-Language Support
Use Contao’s tl_language to localize titles/content:
$items = FaqEntry::where('active', 1)->get()->map(function ($item) {
return [
'title' => $item->question[LANGUAGE],
'content' => $item->answer[LANGUAGE],
];
});
Debugging
config/localconfig.php:
$GLOBALS['TL_CONFIG']['debugMode'] = true;
accordion_id).Extending Functionality
items array with an icon key (e.g., ['icon' => 'fas fa-question']).nested option:
'items' => [
['title' => 'Parent', 'content' => '...', 'nested' => true],
]
How can I help you explore Laravel packages today?