Reusable Contao 4.13 content elements for VTXM projects.
This bundle contains presentation-ready content elements only. It intentionally does not include structural layout or container elements.
Structural elements such as article-insert, layout-preset and content-grid are handled separately.
Content elements included:
- Iconbox
- Media Text
- Link List
- Slider
- Teaser Grid
- Team Grid
- Members Grid
- Live Teaser
- Quote Teaser
- Announcement
- Tabs
- Accordion
- Timeline
- Process Steps / Timeline
- Factsbox
The bundle is theme-agnostic:
- no frontend CSS included
- no JavaScript included
- stable template hooks
- Contao
cssIDsupport preserved
The bundle registers these content elements in the vtxm category:
vtxm_iconboxvtxm_media_textvtxm_link_listvtxm_slidervtxm_teaser_gridvtxm_team_gridvtxm_members_gridvtxm_live_teaservtxm_quote_teaservtxm_announcementvtxm_tabsvtxm_accordionvtxm_timelinevtxm_process_stepsvtxm_factsbox
Add a new content element from the vtxm category.
Typical use cases:
vtxm_iconboxfor service boxes, benefits or compact feature blocksvtxm_media_textfor image/media plus text blocks, biographies, project stories and editorial image/text sections; supports image-left, image-right, image-top, image-bottom, float-left and float-right layouts plus default, editorial, card and minimal stylesvtxm_link_listfor structured links and Contact Links such as websites, email, telephone, WhatsApp, profile links, streaming platforms, downloads, press kits, booking links and external resources; supports standard, icons-only, left/right edge, buttons and minimal styles plus left, center and right alignmentvtxm_sliderfor structured Splide-compatible hero sliders, image sliders, background-video heroes, quotes, card sliders and no-JavaScript Static Hero output; supports hero, images, cards and quotes styles plus render mode, autoplay, arrows, pagination, loop, perPage, gap, transition, image effect, text animation, overlay, width, height, pattern, alignment and scroll-fade settingsvtxm_teaser_gridfor reusable teaser cards with image, title, text, badge and optional link; supports default, cards, editorial and minimal styles plus 2, 3 or 4 columns and small, medium or large gapsvtxm_team_gridfor repeatable team/profile grids with image, role, biography, contact details and three unified additional-link slotsvtxm_members_gridfor the existing fixed four-position team / band member layoutvtxm_live_teaserfor concerts, events or live announcementsvtxm_quote_teaserfor quotes, reviews or press snippetsvtxm_announcementfor short announcements and calloutsvtxm_tabsfor tabbed content groupsvtxm_accordionfor FAQ-style expandable contentvtxm_timelinefor history, milestones or chronological entriesvtxm_process_stepsfor process steps, project phases, how-it-works sections, milestones or reusable timelines; supports process and timeline variants, vertical and horizontal orientation, number, icon or dot markers, alignment hooks and optional reveal hooksvtxm_factsboxfor structured key-value facts, project facts, band facts, metadata or technical details; supports default, compact and card styles
Use this bundle for reusable content blocks.
Recommended separation:
article-insert= article include modulelayout-preset= macro layout / split layoutcontent-grid= micro layout / grid containercontent-elements= reusable content blocks
Example structure:
Content Grid
└── Source article: Services
├── Iconbox
├── Iconbox
├── Iconbox
└── Iconbox
These elements use MultiColumnWizard fields in the Contao backend:
vtxm_tabsvtxm_accordionvtxm_timelinevtxm_factsboxvtxm_link_listvtxm_slidervtxm_teaser_gridvtxm_team_gridvtxm_process_steps
Editors can manage entries in structured rows instead of writing JSON manually.
vtxm_media_text renders one optional image/media block next to editorial content. It is intended for image/text sections, biographies, project stories and compact editorial blocks.
Available layouts:
image-topimage-leftimage-rightimage-bottomfloat-leftfloat-right
Available styles:
defaulteditorialcardminimal
The template emits .media-text and [data-vtxm-media-text] on the component root plus .media-text__inner around the media/content pair. These hooks define the Media Text layout boundary independently of VTXM Section elements. frontend-assets or project CSS must establish a modern formatting context on that boundary, preferably with display: flow-root on .media-text or .media-text__inner, so floated media in the float-left and float-right variants cannot affect following content elements. The remaining position variants can continue to use their existing grid or flex behavior.
The image is selected through the Contao singleSRC file picker. Stored UUIDs are resolved through Contao's file model and only valid image files with configured image extensions are rendered. Invalid UUIDs, folders, missing files and files outside the configured image types do not render broken image markup.
The explicit alt text field is used first. If it is empty, the element tries to use the selected file metadata alt text for the current frontend language. It does not derive alt text from filenames or captions.
The Contao size field is normalized and exposed to the template. Width and height attributes are emitted when reliable values are available: configured size dimensions are used when present; otherwise natural local image dimensions are used when they can be read safely. SVG files can render, but SVG dimensions are not inferred by this bundle. The element keeps the original image path and does not generate resized image files or cache paths.
The custom Media Text backend palette does not expose Contao's fullsize option (labelled “Großansicht/Neues Fenster” in German) or the action-link target option (labelled “In neuem Fenster öffnen” in German). Neither Contao core field nor its database value is changed globally. Existing stored values remain backward compatible: legacy fullsize rendering is retained, and saved target values continue to use the renderer's existing noopener noreferrer protection. Editors still have the separate editorial action fields url and linkTitle.
Captions are escaped and rendered inside the figure only when set. Multiline captions keep safe line breaks. The text field keeps Contao editor-managed rich text output. The optional action link is rendered only for a safe URL and uses rel="noopener noreferrer" when opened in a new window.
Existing Media Text records remain compatible. Visual layout, responsive styling, card/editorial/minimal presentation, hover states and any lightbox behavior belong in frontend-assets or project CSS/JavaScript, not in this bundle.
vtxm_quote_teaser renders one reusable quote card. It does not include a grid or card-arrangement system. To arrange multiple Quote Teasers, place the individual elements through content-grid.
The component root exposes .ce_vtxm_quote_teaser, .quote-teaser and [data-vtxm-quote-teaser]. Quote text uses a semantic blockquote with .quote-teaser__quote and .quote-teaser__text. Optional attribution is rendered outside the quoted content in .quote-teaser__attribution; the author uses .quote-teaser__author, while the existing quoteMeta source metadata uses a semantic cite with .quote-teaser__source. The existing optional link retains .quote-teaser__action and adds .quote-teaser__link.
Quote Teaser currently exposes no backend style or variant option. Frontend styling should therefore target the stable base hooks rather than assume a stored variant. Card borders, radii, shadows, spacing, accent lines, typography, equal-height behavior and responsive presentation belong in frontend-assets or project CSS and are not implemented in this bundle.
vtxm_link_list remains the single reusable element type for structured links and Contact Links. No dedicated Social Links element is included.
Contact Links can point to final editor-entered destinations such as:
- website or profile URLs, for example
https://example.com - email links, for example
mailto:info@example.com - telephone links, for example
tel:+491701234567 - WhatsApp links, for example
https://wa.me/491701234567orhttps://wa.me/491701234567?text=Hello
Editors enter the final destination URL. The element does not generate WhatsApp URLs from phone numbers, does not normalize phone numbers and does not prepend https:// to mailto: or tel: values. Query strings and fragments are preserved. Dangerous schemes such as javascript: are ignored by the renderer.
The existing MultiColumnWizard row structure stays compatible. Existing rows with label, url, icon, description and target keep rendering. New row flags are optional:
nofollowaddsnofollowto the link'sreltokens.relMeaddsmefor profile verification viarel="me".
Rel values are generated centrally with stable token order. New-window links keep noopener noreferrer; optional nofollow and me are added without duplicates. Empty rel attributes are not emitted.
Available display styles:
default: Standard link list output.icons: Icons-only output. The legacy stored value is preserved and now also emits.link-list--icons-only.edge-left: Contact Links hooks for a left page-edge presentation.edge-right: Contact Links hooks for a right page-edge presentation.buttons: Existing button-style output.minimal: Existing minimal output.
The free-text icon marker is preserved. It is normalized to a safe class suffix and exposed through stable classes and data hooks. No predefined platform select, fixed platform list, icon library, SVG injection or unsafe HTML is included.
Icons-only output keeps labels in the DOM so they remain accessible. Labels are expected to be visually hidden by frontend CSS, not removed. If an icons-only row has no usable icon marker, the template emits a visible text fallback so the link is not blank.
Edge variants only provide semantic server-rendered markup hooks in this bundle. Fixed positioning, slide-out presentation, hover/focus expansion and mobile or touch fallback belong in frontend-assets or project CSS. The frontend implementation must reveal labels for both hover and keyboard focus, for example with :hover and :focus-within. Edge positioning can overlap page content, so projects must be able to override or disable that positioning. No JavaScript is required by this bundle.
Existing Link List records remain compatible. The element still emits native anchors, escapes href attributes, keeps visible or visually hidden label text as the accessible name and does not add aria-label when meaningful label text is already present.
vtxm_slider outputs structured hero, image, card, quote and decorative background-video content in one of two render modes. It does not include Splide, Splide Premium files, CSS, JavaScript, scroll listeners, video lifecycle code or slider initialization.
Render modes:
slider: existing Splide-compatible carousel markup and configuration for multi-item slidersstatic: Static Hero output for one editorial or media hero that must remain usable without JavaScript
Static Hero mode reuses the existing slider items and renders only the first usable normalized item. A usable item contains visible text, usable image or video media, or one valid CTA. Empty or invalid rows are skipped before the first usable item is selected.
Static Hero output intentionally does not render Splide markup, carousel controls, pagination or the [data-vtxm-slider] initialization hook. It emits data-vtxm-slider-render-mode="static" and stable Static Hero classes instead. The selected image, text and CTA are visible without JavaScript. Decorative videos keep the existing video hooks for optional source switching and reduced-motion handling, but the desktop video source remains present as the no-JavaScript fallback.
Available transitions:
slidefade
Optional instance-wide effects:
- image effect:
noneorslow-zoom - text animation:
noneorfade-up - overlay:
none,darkorlight
Display modes:
standardhero
Width hooks:
containedfullwidth
Hero height hooks:
autocompactmediumlargeviewportcustom
Custom height is normalized as a pixel value and emitted through a data attribute only. The template does not output inline height styles.
Slide media types:
- image slides
- muted decorative background-video slides
Video slides can define separate desktop and mobile video files plus an optional poster image. Rendered videos are decorative, muted, autoplaying, looping and inline. Video controls are intentionally not rendered. The desktop video is rendered as a fallback <source> so the slide can play before any optional frontend source switching runs.
Pattern overlays:
nonedots-finedots-coarselines-diagonallines-horizontal
Color overlays and pattern overlays are separate decorative layers. Styling for dark/light overlays, dotted patterns and striped patterns belongs in frontend-assets or project CSS.
Scroll fade modes:
nonefadefade-background
The fade distance is normalized as pixels and emitted through a data attribute. fade-background exposes hooks so frontend-assets may fade the Hero into the theme or project background. Background colors belong in frontend-assets or project CSS, not in this bundle.
Static Hero alignment hooks:
- content alignment:
left,center,right - content position:
top,center,bottom - media position:
left-top,center-top,right-top,left-center,center-center,right-center,left-bottom,center-bottom,right-bottom
Static Hero mode reuses the existing overlay, pattern, width, height, custom-height and scroll-fade hooks. It supports the same image media and decorative background-video media as slider items. Version 1 renders one existing CTA only. Multiple CTAs, foreground video controls, transcripts, arbitrary focal coordinates, responsive art direction, overlay intensity fields, new reveal systems, project-specific visual themes and migrations from another element are intentionally deferred.
Effects apply to the complete slider instance, not to individual slides. The visual implementation for transitions, image effects, text animation, overlays, patterns, Hero heights, full-width presentation, scroll fading, video source handling and reduced-motion behavior belongs in frontend-assets or project assets. This bundle only outputs stable classes, data attributes, image/video markup, Splide-compatible slider HTML and no-Splide Static Hero HTML.
Selecting perPage = 3 keeps using Splide perPage and can display three cards or teaser-style items simultaneously. No separate three-box implementation is included.
The consuming project must load Splide before frontend-assets initializes the slider. Fade transition mode uses Splide type: "fade"; when loop is enabled in the backend, the generated Splide options use rewind: true instead of type: "loop".
Existing image-only sliders remain compatible. Missing media type values default to image. The Static Hero item headline uses the configured Contao headline unit. Explicit image alt text is preserved, and an empty alt text remains valid for decorative images. Decorative videos are rendered muted, inline, looping and hidden from assistive technologies. Links render only when both a safe URL and a visible label are available; new-window links use rel="noopener noreferrer".
Reduced-motion handling belongs in frontend-assets. It should respect prefers-reduced-motion, avoid scroll-motion effects, avoid slow image zoom and text movement, and pause or avoid autoplaying decorative video where practical while retaining poster or static media visibility.
vtxm_teaser_grid renders reusable teaser entries in a stable frontend structure. It is intended for project teasers, editorial cards, campaign links or compact overview grids.
Available styles:
defaultcardseditorialminimal
Column options:
234
Gap options:
smallmediumlarge
Item fields:
- image
- alt text
- title
- text
- badge
- link URL
- link label
- new-window target
Images are selected through the Contao file picker and resolved from stored UUIDs. Invalid UUIDs, folders and missing files do not render an image. No image resizing, fullsize or lightbox behavior is included in this element.
The badge and link are optional. Links are rendered only when both a URL and a visible label are provided. The entire teaser card is not clickable.
This bundle does not include frontend CSS or JavaScript for Teaser Grid. Styling is expected through frontend-assets or project CSS.
vtxm_team_grid renders repeatable team, staff or profile entries in server-rendered markup. It is the reusable profile grid element for new team sections.
Use vtxm_team_grid when editors need an arbitrary number of people with structured profile data. Use the legacy vtxm_members_grid only when the existing fixed four-position top/left/right/bottom member layout is required. Existing vtxm_members_grid records are not migrated and its rendering remains unchanged.
Available styles:
cardsminimallist
Layouts:
gridlist
Column options:
234
Gap options:
smallmediumlarge
Image ratio hooks:
portraitsquarelandscapenatural
Alignment hooks:
leftcenter
Reveal hooks:
nonefade-up
Person fields:
- image
- optional explicit image alt text
- name
- role/function
- biography
Contact fields:
- phone
- website
Additional-link fields:
- Link 1: optional icon, optional visible label and URL
- Link 2: optional icon, optional visible label and URL
- Link 3: optional icon, optional visible label and URL
Website remains a separate contact field. Profiles have exactly three additional-link slots.
Rows are edited through MultiColumnWizard and keep their backend order in the frontend. Each row uses the widget's grouped-column behavior to present one responsive profile block instead of one oversized horizontal table row. Image and alternative text, name and role, full-width biography, contact fields and the three link slots stay within the normal backend content width. Native row operations and the image picker remain provided by MultiColumnWizard and Contao.
Completely empty rows are skipped. A row is usable when it has a name, or at least one of role, biography, valid media, contact field or valid additional link.
Images are selected through the Contao file picker and resolved from stored UUIDs. Invalid UUIDs, folders, missing files and files outside the configured image types do not render an image. Missing images render no media element and expose no-media hooks instead of a fake placeholder image.
Explicit image alternative text is preserved. It may remain empty when the portrait is decorative and the adjacent name already conveys the same information. The element never derives or fills alternative text from the person's name.
The biography is rendered as escaped plain text with line breaks preserved. Contact links render only when valid: email becomes mailto:, phone becomes tel:, and website/additional links accept safe web URLs.
Additional links support icon only, visible label only, or icon plus visible label. A URL without an icon or label, or an icon/label without a URL, produces no anchor. Icon-only links receive the platform name as their accessible link name. When visible text is present it supplies the accessible name and the local SVG is decorative. external-link requires a visible label and cannot render as an icon-only link. Unknown icon keys are ignored safely; if a visible label and safe URL remain, the link falls back to text-only output. Identical additional-link URLs are rendered only once. Unified links use normal browser navigation and never add target="_blank".
The curated icon keys are instagram, linkedin, github, mastodon, bluesky, facebook, youtube, tiktok, x, website and external-link, plus the editor's no-icon choice. SVG files are local, whitelisted and rendered inline without JavaScript. Sources and license details are recorded in ICON_SOURCES.md.
The Team Grid profile model was replaced before productive use. The former experimental fields are not read, mapped or retained. Existing experimental Team Grid records may need to be deleted and recreated with the fields above.
The optional fade-up reveal setting emits the existing generic reveal-group hooks used by frontend-assets: .vtxm-reveal-group, .vtxm-reveal-item, data-vtxm-reveal-type, data-vtxm-reveal-target and data-vtxm-reveal-stagger. Content remains visible without JavaScript.
The output uses list semantics, one article per person, a heading for each name, accessible contact and additional links, decorative empty alt attributes when configured, keyboard-accessible native links and no modal or disclosure behavior.
Styling, profile card presentation, reveal animation details and reduced-motion handling belong in frontend-assets or project CSS/JavaScript. This bundle only outputs stable markup, classes, data hooks and the curated local SVG shapes required by Team Grid links.
Deferred features for this element include frontend CSS, JavaScript, complete icon libraries, modal profiles, detail pages, person database entities, categories, departments, filtering, sorting UI, arbitrary focal points, responsive art direction, automatic image placeholders, project-specific colors and migrations from vtxm_members_grid.
vtxm_process_steps renders ordered process steps, phases, milestones, how-it-works entries or timeline entries in stable server-rendered markup.
Supported variants:
processtimeline
Orientation hooks:
verticalhorizontal
Marker styles:
numbericondot
Alignment hooks:
leftcenterrightalternate
Reveal hooks:
nonefade-up
Backend fields:
- optional Contao headline
- optional intro text
- variant
- orientation
- marker style
- alignment
- reveal hook
- repeatable entries
- custom CSS ID and class through Contao
cssID
Item fields:
- marker
- date / eyebrow
- title
- text
- icon
- image
- alt text
- link URL
- link label
- new-window target
- optional CSS class
The entries are edited through MultiColumnWizard rows and keep their backend order in the frontend. Empty rows and rows without meaningful visible content are skipped. Number markers fall back to the 1-based entry number. Links are rendered only when both a safe URL and a visible label are present. Image UUIDs are resolved through Contao's file model and only valid existing image files are rendered. Explicit alt text is used first; when empty, file metadata alt text is used when available. Decorative images may render with an empty alt attribute.
The output uses ordered-list semantics and remains fully usable without JavaScript. The optional reveal setting only emits classes and data attributes. Styling, horizontal layout behavior, marker visuals, reveal animation runtime and reduced-motion handling belong in frontend-assets or project CSS/JavaScript.
No styling or JavaScript behavior is included by design.
Use your project CSS and JavaScript to define:
- spacing
- grid behavior
- colors
- animations
- process step and timeline styling
- tab switching
- accordion behavior
- slider initialization
All elements preserve Contao cssID support through the shared AbstractWrappedContentElement.
The iconboxIcon value is escaped in the template. Use it for icon class names, labels or short markers. SVG or HTML icon markup is intentionally not rendered raw in this version.
The vtxm_slider element outputs Splide-compatible markup and data attributes in slider render mode, or no-Splide Static Hero markup in static render mode. Styling and JavaScript are expected through frontend-assets, especially css/vtxm-components.css, js/vtxm-components.js, and vendor Splide assets or a local Splide build loaded by the consuming project.
Root classes:
.ce_vtxm_iconbox.ce_vtxm_media_text.ce_vtxm_link_list.ce_vtxm_slider.ce_vtxm_teaser_grid.ce_vtxm_team_grid.ce_vtxm_members_grid.ce_vtxm_live_teaser.ce_vtxm_quote_teaser.ce_vtxm_announcement.ce_vtxm_tabs.ce_vtxm_accordion.ce_vtxm_timeline.ce_vtxm_process_steps.ce_vtxm_factsbox
Factsbox hooks:
.factsbox__headline.factsbox__items.factsbox__item.factsbox__key.factsbox__value.factsbox--default.factsbox--compact.factsbox--card
Factsbox styling is expected through frontend-assets, especially css/vtxm-components.css.
Media Text hooks:
.media-text.media-text__inner.media-text__media.media-text__link.media-text__image.media-text__caption.media-text__content.media-text__eyebrow.media-text__headline.media-text__text.media-text__action.media-text--image-left.media-text--image-right.media-text--image-top.media-text--image-bottom.media-text--float-left.media-text--float-right.media-text--default.media-text--editorial.media-text--card.media-text--minimal[data-vtxm-media-text]
Media Text styling is expected through frontend-assets, especially css/vtxm-components.css.
Quote Teaser hooks:
.ce_vtxm_quote_teaser.quote-teaser.quote-teaser__headline.quote-teaser__quote.quote-teaser__text.quote-teaser__attribution.quote-teaser__author.quote-teaser__source.quote-teaser__action.quote-teaser__link[data-vtxm-quote-teaser]
Quote Teaser styling is expected through frontend-assets or project CSS. Multiple-card layout is handled by content-grid, not by Quote Teaser.
Link List hooks:
.ce_vtxm_link_list.link-list__headline.link-list__items.link-list__item.link-list__item--has-icon.link-list__item--no-icon.link-list__link.link-list__link--has-icon.link-list__link--no-icon.link-list__icon.link-list__label.link-list__label-fallback.link-list__description.link-list--default.link-list--buttons.link-list--icons.link-list--icons-only.link-list--minimal.link-list--edge.link-list--edge-left.link-list--edge-right.link-list--expand-labels.link-list--align-left.link-list--align-center.link-list--align-right[data-vtxm-link-list][data-vtxm-link-list-style][data-vtxm-link-list-align][data-vtxm-link-list-edge][data-vtxm-link-list-item][data-vtxm-link-list-item-index][data-vtxm-link-list-icon]
Link List styling is expected through frontend-assets, especially css/vtxm-components.css. Edge positioning and label expansion are not implemented in this bundle.
Slider hooks:
.ce_vtxm_slider.vtxm-slider.vtxm-slider__slide.vtxm-slider__item.vtxm-slider__media.vtxm-slider__media--image.vtxm-slider__media--video.vtxm-slider__image.vtxm-slider__video.vtxm-slider__overlay.vtxm-slider__pattern.vtxm-slider__content.vtxm-slider__eyebrow.vtxm-slider__headline.vtxm-slider__text.vtxm-slider__action.vtxm-slider--render-static.vtxm-slider--content-align-left.vtxm-slider--content-align-center.vtxm-slider--content-align-right.vtxm-slider--content-position-top.vtxm-slider--content-position-center.vtxm-slider--content-position-bottom.vtxm-slider--media-position-left-top.vtxm-slider--media-position-center-top.vtxm-slider--media-position-right-top.vtxm-slider--media-position-left-center.vtxm-slider--media-position-center-center.vtxm-slider--media-position-right-center.vtxm-slider--media-position-left-bottom.vtxm-slider--media-position-center-bottom.vtxm-slider--media-position-right-bottom.vtxm-static-hero.vtxm-static-hero__media.vtxm-static-hero__media--image.vtxm-static-hero__media--video.vtxm-static-hero__image.vtxm-static-hero__video.vtxm-static-hero__overlay.vtxm-static-hero__pattern.vtxm-static-hero__content.vtxm-static-hero__eyebrow.vtxm-static-hero__headline.vtxm-static-hero__text.vtxm-static-hero__action.vtxm-static-hero__link.slider--hero.slider--images.slider--cards.slider--quotes.slider--gap-none.slider--gap-small.slider--gap-medium.slider--gap-large.slider--transition-slide.slider--transition-fade.slider--image-none.slider--image-slow-zoom.slider--text-none.slider--text-fade-up.slider--overlay-none.slider--overlay-dark.slider--overlay-light.slider--mode-standard.slider--mode-hero.slider--width-contained.slider--width-fullwidth.slider--height-auto.slider--height-compact.slider--height-medium.slider--height-large.slider--height-viewport.slider--height-custom.slider--pattern-none.slider--pattern-dots-fine.slider--pattern-dots-coarse.slider--pattern-lines-diagonal.slider--pattern-lines-horizontal.slider--scroll-none.slider--scroll-fade.slider--scroll-fade-background[data-vtxm-slider][data-vtxm-slider-render-mode][data-vtxm-slider-mode][data-vtxm-slider-width][data-vtxm-slider-height][data-vtxm-slider-custom-height][data-vtxm-slider-pattern][data-vtxm-slider-scroll-effect][data-vtxm-slider-scroll-distance][data-vtxm-video][data-vtxm-video-desktop][data-vtxm-video-mobile]
[data-vtxm-slider] is emitted only by the slider render mode. Static Hero mode emits data-vtxm-slider-render-mode="static" and remains usable without JavaScript. Slider styling, Static Hero styling and optional JavaScript enhancements are expected through frontend-assets, especially css/vtxm-components.css, js/vtxm-components.js, and vendor Splide assets or a local Splide build.
Teaser Grid hooks:
.ce_vtxm_teaser_grid.teaser-grid.teaser-grid--default.teaser-grid--cards.teaser-grid--editorial.teaser-grid--minimal.teaser-grid--cols-2.teaser-grid--cols-3.teaser-grid--cols-4.teaser-grid--gap-small.teaser-grid--gap-medium.teaser-grid--gap-large.teaser-grid__headline.teaser-grid__items.teaser-grid__item.teaser-grid__media.teaser-grid__image.teaser-grid__overlay.teaser-grid__content.teaser-grid__title.teaser-grid__text.teaser-grid__link.teaser-grid__badge
Teaser Grid styling is expected through frontend-assets, especially css/vtxm-components.css, or project CSS.
Team Grid hooks:
.ce_vtxm_team_grid.team-grid.team-grid__header.team-grid__headline.team-grid__list.team-grid__item.team-grid__card.team-grid__media.team-grid__image.team-grid__media-placeholder.team-grid__content.team-grid__name.team-grid__role.team-grid__biography.team-grid__contacts.team-grid__contact.team-grid__socials.team-grid__social.team-grid__social--has-icon.team-grid__social--no-icon.team-grid__social--has-label.team-grid__social--icon-only.team-grid__social-icon.team-grid__social-icon-svg.team-grid__social-label.team-grid--style-cards.team-grid--style-minimal.team-grid--style-list.team-grid--layout-grid.team-grid--layout-list.team-grid--columns-2.team-grid--columns-3.team-grid--columns-4.team-grid--gap-small.team-grid--gap-medium.team-grid--gap-large.team-grid--ratio-portrait.team-grid--ratio-square.team-grid--ratio-landscape.team-grid--ratio-natural.team-grid--align-left.team-grid--align-center.team-grid--has-media.team-grid--no-media.team-grid--reveal-none.team-grid--reveal-fade-up[data-vtxm-team-grid][data-vtxm-team-grid-item][data-vtxm-team-grid-style][data-vtxm-team-grid-layout][data-vtxm-team-grid-columns][data-vtxm-team-grid-gap][data-vtxm-team-grid-ratio][data-vtxm-team-grid-align][data-vtxm-team-grid-link-icon][data-vtxm-reveal-type][data-vtxm-reveal-target][data-vtxm-reveal-stagger].vtxm-reveal-group.vtxm-reveal-item
Team Grid styling and optional reveal behavior are expected through frontend-assets, especially css/vtxm-components.css and js/vtxm-components.js, or project assets.
Process Steps hooks:
.ce_vtxm_process_steps.process-steps.process-steps__header.process-steps__intro.process-steps__items.process-steps__item.process-steps__marker.process-steps__content.process-steps__eyebrow.process-steps__title.process-steps__text.process-steps__media.process-steps__link.process-steps--process.process-steps--timeline.process-steps--vertical.process-steps--horizontal.process-steps--marker-number.process-steps--marker-icon.process-steps--marker-dot.process-steps--align-left.process-steps--align-center.process-steps--align-right.process-steps--align-alternate.process-steps--reveal-none.process-steps--reveal-fade-up[data-vtxm-process-steps][data-vtxm-process-steps-variant][data-vtxm-process-steps-orientation][data-vtxm-process-steps-marker][data-vtxm-process-steps-reveal][data-vtxm-process-step][data-vtxm-process-step-index]
Process Steps styling and optional reveal behavior are expected through frontend-assets, especially css/vtxm-components.css and js/vtxm-components.js, or project assets.
Additional hooks are available inside the individual templates.
Templates are located at:
src/Resources/contao/templates/
Templates:
ce_vtxm_iconbox.html5ce_vtxm_media_text.html5ce_vtxm_link_list.html5ce_vtxm_slider.html5ce_vtxm_teaser_grid.html5ce_vtxm_team_grid.html5ce_vtxm_members_grid.html5ce_vtxm_live_teaser.html5ce_vtxm_quote_teaser.html5ce_vtxm_announcement.html5ce_vtxm_tabs.html5ce_vtxm_accordion.html5ce_vtxm_timeline.html5ce_vtxm_process_steps.html5ce_vtxm_factsbox.html5
This bundle requires:
- Contao 4.13
- PHP 8.0+
menatwork/contao-multicolumnwizard-bundle
Add the package definition to your Contao project composer.json or install it via your configured repository setup.
Example package reference:
{
"repositories": [
{
"type": "package",
"package": {
"name": "vtxm-h/content-elements",
"version": "1.1.0",
"type": "contao-bundle",
"license": "MIT",
"description": "Reusable Contao 4.13 content elements for VTXM projects.",
"dist": {
"url": "https://github.com/vtxm-h/content-elements/archive/refs/tags/v1.1.0.zip",
"type": "zip"
},
"autoload": {
"psr-4": {
"Vendor\\ContentElementsBundle\\": "src/"
}
},
"require": {
"php": "^8.0",
"contao/core-bundle": "^4.13",
"contao/manager-plugin": "^2.0",
"menatwork/contao-multicolumnwizard-bundle": "^3.6"
},
"extra": {
"contao-manager-plugin": "Vendor\\ContentElementsBundle\\ContaoManager\\Plugin"
}
}
}
]
}Install:
composer require vtxm-h/content-elementsThen update the Contao database so the new tl_content fields are created.
Contao 4.13 PHP 8.0+
MIT