Komplett guide: Hur man dynamiskt fyller fält i gravitationsformer
Att bygga enkla eller komplexa formulär i Gravity Forms är enkelt och snabbt. En av funktionerna Gravity Forms erbjuder är att du kan villkorligt förvälja eller förfylla i fält i ett formulär. Detta är användbart när du har samma formulär på flera kontaktsidor för varje avdelning och vill förvälja motsvarande avdelning i formuläret. Eller så bäddar du in ett förfrågningsformulär på produkt- eller tjänstesidor och vill automatiskt fylla i information om den aktuella produkten eller tjänsten i varje inlämning.
Du kan dynamiskt förvälja eller förfyll i fält på flera sätt, och du kan också dynamiskt ersätta de möjliga valen i en rullgardinsmeny, alternativknapp eller kryssrutagrupp. Fältet du dynamiskt fyller i kan vara ett synligt fält som användaren kan redigera, eller så kan det dirigeras till ett dolt fält så att läsaren av formulärinlämningarna får viktig information.
De fyra sätten att dynamiskt fylla i fält
I den här guiden kommer vi att titta på fyra sätt att dynamiskt fylla i fält i ett Gravity Forms-formulär. Tre av dem kan du göra utan att röra någon kod! Men om du dynamiskt vill ändra de möjliga valen i en markering, alternativknappsgrupp eller kryssrutor måste du skriva lite PHP-kod. Vi ska titta på hur man gör det i slutet.
Du kan fylla i fält dynamiskt genom att:
- Lägger till extra information i URL:en.
- Ge extra information till inbäddningskortkoden för Gravity Forms.
- Definiera extra information till Gravity Forms-blocket (om du använder WordPress med Gutenberg).
- Använder filter med PHP-kod.
Men först måste vi gå igenom hur man aktiverar dynamisk population av ett fält.
Aktivera ett fält för att tillåta dynamisk population
Det första steget oavsett vilken metod du använder för att fylla i fältet, är att aktivera detta på själva fältet.
I formulärredigering, expandera fältet och på fliken "Avancerat" hittar du en kryssruta "Tillåt att fält fylls i dynamiskt". Markera detta och en ny textinmatning visas som låter dig definiera ditt parameternamn. Detta kan vara allt du vill, men ska vara unikt och utan mellanslag.
Spara formuläret så är det klart för dig att bestämma vilken metod du vill använda för att fylla i det.
Fyller i dynamiskt från URL-parametrar
Du kan lägga till GET-parametrar till länken till sidan som bäddar in formuläret, till exempel om länken finns i en annan inläggstext eller är en anpassad länk i WordPress-menyer.
Lägg helt enkelt till frågevariabler i nyckelvärdespar, med parameternamn som nyckel och deras värde som vad du än vill att deras värde ska vara. Det är möjligt att lägga till flera nyckelvärdespar om du vill fylla i flera fält i formuläret, separera helt enkelt varje par med "&".
Förutsatt att ditt formulär finns på denna sida: " https://example.com/contact-me/
", och ditt parameternamn är awp_populate_me
att du kan fylla i fältet genom att använda denna URL: " https://example.com/contact-me/?awp_populate_me=Hello
".
Tänk på att webbadresser måste vara korrekt kodade. Du kan till exempel inte bara lägga till mellanslag eller specialtecken direkt som parametervärde. Tillhandahåller "Hej världen!" eftersom värdet skulle vara " Hello%20world%21
". Det finns gott om onlineverktyg för att koda webbadresser åt dig om du vill gå den här vägen.
Fyller dynamiskt från kortkod
Alla formulär infogas via en kortkod. Du kan dynamiskt fylla i fält direkt i denna kortkod. Den här metoden kan vara användbar om du använder samma formulär i flera inlägg (t.ex. registrerar deltagare för flera olika evenemang eller kurser), och du behöver tillhandahålla något unikt för att veta vilket evenemang eller kurs formuläret kom från…
Normalt när du bäddar in ett formulär resulterar det i en kortkod som ser ut ungefär så här:[gravityforms id="1" title="Contact us"]
Redigera kortkoden och lägg till nyckeluppsättningen field_values
i en sträng som innehåller ditt parameternamn är lika med önskat värde. Till exempel att ställa in en parameter awp_populate_me
till ‘Hello World’ görs så här:
[gravityforms id="1" title="Contact us" field_values="awp_populate_me=Hello World"]
Om du behöver fylla i flera fält lägg till ett "&" emellan, så här:
[gravityforms id="1" title="Contact us" field_values="awp_populate_me=Hello World&awp_another_field=Hello to you too"]
Befolkar dynamiskt från Block i Gutenberg
Om du har GravityForms version 2.4.13+ och WordPress med Gutenberg (WordPress 5+) kan du lägga till Gravity Forms som ett block. Inom detta block har du en metod för att fylla i fält också.
Lägg till blocket "Formulär" i Gutenberg och välj ditt formulär. Blocket bör ändras till en formulärförhandsgranskning. Expandera Avancerat i den högra sidopanelen och du hittar ett textområde märkt "Fältvärden". I det här textområdet kan du skriva in dina parameternamn och värden, precis som du skulle skriva i kortkoden. T.ex. " awp_populate_me=Hello World!
"
Fyller dynamiskt från kod
Och slutligen, om du hellre vill fylla i dina fält med PHP-kod, finns det filter för detta. Du kan placera den här koden i ditt temas functions.php
.
Hur du kodar detta beror på vilken typ av fält det är; som du förmodligen kan gissa att fylla (ersätter alla val) i en markering, måste kryssrutor eller radiogrupp hanteras annorlunda än att bara fylla i ett enda textfält.
Fyller i ett enskilt värdefält
Att fylla i ett fält som har ett enda värde (detta gäller textfält, textområde, e-postfält, telefonfält och liknande) görs enkelt genom att filtrera gform_field_value_<parameter name>
. I vårt exempel:
add_filter('gform_field_value_awp_populate_me', function($value) {
return 'Hello world!';
});
Du kan också använda detta filter för att förvälja ett alternativ i ett flervärdesfält, t.ex. välj (rullgardinsmeny), alternativknappar eller kryssrutor.
Fylla i ett urval eller alternativknappar
Om du bara är intresserad av att förvälja ett alternativ, följ guiden ovan för att fylla i ett enda värdefält. Denna kod är avsedd för att anpassa eller ersätta de möjliga val du får i fältet.
Gravity Forms formrenderingsfilter
Filtret gform_pre_render
tillåter oss att ändra formuläret precis innan det visas. Men när vi gör ändringar här bör vi se till att våra ändringar tillämpas i alla fall; så vi måste också haka på gform_admin_pre_render
(motsvarande pre_render-filter men påverkar admin/formulärredigering), gform_pre_validation
(ansvarig för att validera formuläret före inlämning) och gform_pre_submission_filter
(filtrera efter validering men innan inmatningen sparas). Oroa dig inte, vi använder en och samma funktion för alla dessa filter.
Du kan filtrera dessa direkt, eller så kan du ange ett understreck och formulär-ID efter filternamnet, endast för att filtrera ett specifikt formulär. Till exempel gform_pre_render_1
skulle endast köras på ett formulär med formulär-ID 1.
Som argument till alla dessa filter får du formulärobjektet, där du kan få tag på formulär-ID (alternativ metod för att lägga till formulär-ID vid filtret), och alla dess fält. Formulärfälten är en rad Field
objekt – men allt vi behöver oroa oss för är att ersätta det korrekta fältets choices
egenskap.
Ändra valen
Vilken typ av data du vill ersätta val med är helt upp till dig, men ett fälts choices
egenskap behöver en array som har elementen ‘text’ och ‘value’. Till exempel ['text' => 'Hello World!', 'value' => '1', 'text' => 'Second choice', 'value' => '2']
.
Ovanstående kod filtrerar endast formulär-ID 1. Den börjar med att loopa genom formulärets fält. Det är viktigt att notera "&" före elementet i slingan, som skickar det genom referens. Det betyder att om vi gör ändringar i $field
, så tillämpas och sparas den direkt på $form['fields']
.
Det andra steget är att rikta in fältet som har parameternamnet vi vill rikta in oss på. För varje fält är detta inputName
egenskapen. Du kan använda andra sätt att rikta in dig på fält, t.ex. dess ID (id
) eller CSS-klass (cssClass
). När vi har hittat vårt fält måste vi generera ersättningsarrayen till val och ställa $field->choices
in på detta. I exemplet ovan frågar jag alla sidor och går igenom dem för att skapa en korrekt formaterad array.
Glöm inte att returnera den $form
i slutet, eftersom detta är ett filter.
Det är värt att nämna att detta filter även gäller för redigeringsformulär (eftersom vi filtrerar gform_admin_pre_render
). Men kom ihåg att du inte längre kan manipulera valen i formulärredigering – det kommer bara inte att spara dina ändringar eftersom den här koden alltid kommer att åsidosätta den.
Fyller i kryssrutor
Jag ska nämna det igen; om du bara är intresserad av att förvälja en kryssruta, följ guiden ovan för att fylla i ett enskilt värdefält. När det gäller att ersätta alla val i kryssrutor är processen mycket lik att fylla i ett val eller alternativknappar ovan, men med några mindre skillnader. Jag rekommenderar att först titta igenom förklaringen ovan för val och radioknappar.
Du använder samma filter och startprocessen är densamma; du går igenom formulärets fält och hittar den du vill ha. Men med kryssrutor måste du ersätta två egenskaper i fältobjektet; choices
och inputs
. Egenskapen choices
förväntar sig samma array som i en val eller alternativknappar.
Egenskapen input
förväntar sig en array med elementen ‘ label
‘ och ‘ id
‘. Den label
är självförklarande och bör vara identisk med text
valen. Elementet id
måste följa Gravity Forms ID-regler; sammanlänkning av fält-ID, en punkt och val-ID, som börjar med 1 (t.ex. om fält-ID är 2 och val-ID är 3, är det korrekta id
" 2.3
").
Eftersom val-ID måste börja på 1, startar vi en räknarvariabel före loopen och lägger till 1 för varje element i loopen, och använder det tillsammans med fält-ID och en punkt som id
i inputs
array.
När vi har våra två arrayer sätter vi dem på fältets choices
och inputs
egenskaperna och returnerar den modifierade formen.