Grund: vad module-blocks är

module-blocks är den generiska kortmodulen i CCMS för att visa flera informationskort i en sektion.

Varje kort kan innehålla rubrik, text, bild och valfri CTA-knapp. Samma grund används också av flera specialvarianter (t.ex. steps, products, videos, audio) men här dokumenteras basvarianten.

Modulen är designad för hög återanvändning: samma JSON-struktur kan köras i flow, tabs eller slider utan att ändra kärninnehållet.

Val 1: kärnnycklar och struktur

Top-level ligger i blocks med nycklar som module_type, id, aria_label, section_title, section_description, columns och layout.

Innehållet skrivs i items[], där varje item kan ha:

  • display, title, text_html
  • image.* (cover/media)
  • video.* och audio.* (valfritt)
  • button.* för CTA
  • appearance och display_below_desktop_class

Bakgrund för hela sektionen styrs av background.have_background, background.background_src och background.background_overlay.

Val 2: layout (flow, tabs, slider)

layout normaliseras till tre lägen:

  • flow: vanligt grid med flera kort samtidigt.
  • tabs: ett aktivt kort i taget med tab-navigering.
  • slider: aktivt kort med pilar/pagination och valfri autoplay.

För tabs används tabs_settings (position, mobilposition, startindex och appearance). För slider används slider_settings (index_start, loop, pilar, pagination, arrows_position, auto och auto_interval).

Om ogiltiga värden skickas in faller builden tillbaka till säkra defaults, till exempel layout: flow.

Val 3: kortnivå, media och CTA

Varje item blir ett kort med egen appearance och responsklass. Bilder får automatiskt srcset/sizes från manifestet om image.src används.

Video och audio renderas i mediazonen med overlay/play-knapp. När columns=1 sätts blocks.is_one_column, vilket påverkar video-sourceval i template.

Knappen i kortet använder button.href direkt i nuvarande implementation. Till skillnad från hero/big_button finns ingen separat auto-href-resolver för blocks.button.

Val 4: kompilator och runtime-detaljer

Builden normaliserar items[] till block1..blockN och beräknar blocks.auto_display utifrån synliga kort. Template renderar idag upp till block12, så kort över tolv visas inte utan template-utökning.

slider_settings.auto_interval_ms clampas till 1000–120000 ms, och index_start clampas till antal synliga kort.

Client-scriptet bygger tabs/slider-kontroller från data-attribut i HTML. För audio i blocks renderas preload="none" i template, oavsett eventuella preload-nycklar i innehållsdata.

Val 5: schema, SEO och AI-optimering

För generiska blocks är ItemList en bra bas: ett listobjekt för sektionen och en ListItem per synligt kort.

Mappa title till name och en kort sammanfattning av text_html till description. Lägg till url när kortet har CTA-länk, och image när kortbilden är semantiskt viktig.

Undvik att duplicera globala schema-noder i modulen. Håll i stället modulens schema fokuserat på kortens innehåll och handlingar.