Det är fler än jag som har funderat över hur man gör för att använda flera CCK-fält som ett enda, i den bemärkelsen att man kan lägga till flera fält på en gång genom knappen add another item. Funktionen kan vara användbar i en rad olika sammanhang, i allt från att lägga till bild + bildtext + fotograf till saker som recept där man vill ha ingredienslista med mängd + enhet + råvara.
Det finns tyvärr ingen bra lösning, men här kommer en översikt av de lösningar som finns. Jag har speciellt kollat in hur lösningarna fungerar tillsammans med Views.
Befintliga stabila lösningar
Det finns några moduler som erbjuder fältkombinationer för specifika ändamål. Här är några som är värda att nämna (men det kan förstås finnas fler):
- FileField och ImageField ger plats för beskrivningstext tillsammans med den uppladdade filen, och med bilder finns det också möjlighet att använda alt- och title-texter. Datamässigt ligger extrainformation sparad på ett rätt speciellt sätt, men det är fullt möjligt att använda den i Views. Att spara exempelvis information om fotograf i en title-text ska räknas som ett hack, men den som väljer en sån lösning har i alla fall fördelen att FileField och ImageField är extremt välanvända och kommer att ingå i Drupal 7 core.
- Link har dubbla fält – ett för länktitel och en för URL. Det går utmärkt att hantera dem var och en för sig i Views om man skulle vilja det, men modulen är låst till just ett textfält och ett URL-fält.
- Attribute är en modul som ger parvisa textfält, kallade attribute och value. Det finns bara möjlighet att ha textfält för inmatning (alltså ingen select eller så), och i Views finns inga alternativ för att styra utmatningen – båda värdena syns tillsammans hela tiden.
- Det finns också ett antal tabellfält, så som TableField och Matrix Field. De gör det möjligt att mata in värden som visas i tabellformat, men är inte gjorda för att tillåta visning av utvalda fält genom exempelvis Views.
Den långsiktiga lösningen: Multigroup
På lång sikt heter lösningen multigroup och ingår för närvarande i version 3 av CCK. (Nuvarande version är 2, och 3:an är i dev-status för Druapal 6 och finns inte i någon offentlig release för Drupal 7.)
Multigroup gör det möjligt att använda CCK:s Fieldgroups för att skapa till upprepade kopior av fälten som ingår, och dessa kan sedan hanteras var och en för sig i Views som vilket upprepat fält som helst. Tyvärr är det svårt att hantera fälten tillsammans – i en tabell för exempelvis en receptnod får man en kolumn med "2 / 3", en kolumn med "st / dl" och en kolumn med "ägg / socker". Väljer man att inte gruppera multipla värden tillsammans får man dubletter som är svåra att bli av med. (Multigroup lyckas däremot bra med att gruppera värdena tillsammans på nodsidan.)
En svaghet med multigroup är att det inte går att ha multipla värden av något av de ingående fälten – du kan alltså inte ha mer än en fotograf per bild (eller så).
För Drupal 7 finns ett motsvarande projekt som heter Combofield. Jag har inte testat modulen.
En möjlig lösning tills vidare: Flexifield
Modulen Flexifield gör något som påminner om Multigroup, men har valt en annan lösning. Istället för att använda fieldgroups kräver Flexifield att du skapar en nodtyp som fungerar som mall för ditt multifält. För ett komplext fotofält skulle du alltså kunna skapa en nodtyp med bildfält, bildtext som tillåter formaterad text och ett fotograffält som är en nodreferens där du kan hänvisa till godtyckligt antal fotografer.
Flexifield fungerar förvånansvärt bra med Views – utan några vidare inställningar kan du mata ut datan på samma sätt som för multigroup. Dessutom kan du få bättre precision på fälten genom att använda relationships i Views och välja ut all data på rad N i multifältet, som sedan kan hanteras precis som vanliga fält i Views.
Flexifield verkar dock ha lite problem när man försöker har multipla fält inuti ett multifält – typ flera fotografer. När jag försökte har obegränsat antal länkfält i en Flexifield fick jag whitescreen så snart jag försökte spara. (Detta lär inte bero på minnesfel, utan snarare någon PHP-funktion som sparkar bakut ordentligt.) Det fungerade dock fint med nodreferenser, så det kan potentiellt fungera bra. En annan lucka jag hittade var när man i Views försöker visa de multipla fälten inuti Flexifield – de vill inte synas när man väljer att gruppera multipla värden tillsammans. I en lista över bilder till en artikel skulle det alltså motsvara att det blir en rad för varje fotograf, vilket väl inte är det man vill ha. (Vill man ha mindre precision går det som med Multigroup att mata ut all data i fältet på en gång, som tidigare sagt.)
I nuläget är min slutsats alltså att Flexifield är den bäst fungerande lösningen. Den stora nackdelen är att det du bygger med Flexifield kommer att behöva göras om till Drupal 7 – det finns inga planer på att flytta vidare modulen, och förvaltaren säger rakt ut att Multigroup och Combofield kommer att ersätta Flexifield.
En annan lösning: skriva ett eget CCK-fält
För den som har coding skills och även en del tålamod finns möjligheten att göra en modul ger precis de fält man behöver. Det finns en guide på följande sida, som jag mest bara har ögnat igenom: http://www.poplarware.com/articles/cck_field_module
Sådär! Hoppas att informationen kan vara till nytta för fler än mig.
//Johan Falk, NodeOne
**
Vill du lära dig mer om Drupal? Kolla in samlingen av tips och guider!
Har du en fråga om Drupal? Missa inte FAQ-sidan på forumet!
Första svenska boken om Drupal! Börja med Drupal – smart webbpublicering med open source
Kolla in NodeOnes Drupalkurs i Panels och Views 15–17 september!

Comments
Schysst!
Bra genomgång Johan, tack! Jag har varit inne och nosat på det här området och också kommit fram till att multigroup förmodligen är rätt lösning. Ser fram emot CCK 3!
/ Hannes Lilljequist – SthlmConnection
http://www.poplarware.com/art
http://www.poplarware.com/articles/cck_field_module
Vilken trevlig howto. Tackar!