Drop-down-meny med relationsbaserad värdelista på webbformulär

Tråden skapades och har fått 7 svar. Det senaste inlägget skrevs .
1

Går det att få en så kallad drop-down meny på ett webbformulär att visa värden beroende på ett tidigare fält på formuläret. I Filemaker kan jag få en värdelista (value-list) med värden från ett definierat fält i relaterade poster. Värdelistan kan sedan användas för inmatning i ett efterföljande fält, t.ex. med hjälp av en meny. Kan Lasso ta den tekniken till mitt webbformulär?

(Webbservern kör Filemaker Server 8.5 och Lasso (osäker på version)

I Lasso är det ingen konst alls att göra sådana saker, det finns tom speciella kommandon för detta.

I Lasso kan du även om det skulle vara vettigt, söka i de relaterade posterna direkt och sammanställa värdelistan därifrån, istället för att läsa av den i den layouten där värdelistan finns.

Söker man på value_list i ordlistan hittar man detta:
http://reference.lassosoft.com/Reference.LassoApp?[Value_List]

(Kodexempel på sidan).

Det låter fint! Jag ska kolla in referenssidan som du gav mig länken för. Jag är helt grön på Lasso, men enligt din utsago i tidigare trådar torde det vara hyfsat lätt att lära dess grunder.

Tack.

Jag har försökt läsa på om värdelistor och kommandot [Value_List] på Lasso-referenssidan. En sak som jag undrar över är hur man kan få en värdelista som har som relationsnyckel ett föregående radioknappsval i html-formuläret. Säg t.ex. att man först tillfrågas om vilken världsdel man bor i, genom meny eller radioknappar. Följande <input> är vilket land man bor i. Där skulle jag vilja få en <select>-meny som visar länder enligt den världsdel man tidigare valt. Hur får jag till det???

Det finns flera sätt att göra detta.

Ett är med Javascript - jag provade googla på cascading drop down menus javascript (och lite varianter på det), men hittade inget bra, även om det skall heta så. Man kan alltså i Javascript beroende på vilket land man väljer få nästa meny att uppdateras att visa delstater i det landet man valt osv. Det kallas för det.

Et annat alterantiv är ju Ajax - när användaren gör saker på sidan så skickas uppdateringar direkt till servern och det kommer något tillbaka som förändrar vad som visas i webbläsaren.

Ett vanligt användningsområde är just formulär som när du gör ett val, gör en sökning i en databas på servern och visar i tex nästa meny, något som uppfyller det första valet. Wikipedia har detta tex när man skriver sökord i sökrutan. I Lasso heter det dock LJAX och det finns ett kapitel om detta i Lasso Language Guide.

http://www.lassosoft.com/Documentation/index.lasso

Eftersom saker skall ske i webbläsaren, alltså inte på servern, så behöver du någon eller båda dessa två tekniker.

Tillägg: Hittade en Tip of the week som gör exakt vad du vill:

Dynamic Selects and XML HTTP Requests
http://www.lassosoft.com/Documentation/TotW/index.lasso?8810

Sidan innehåller en länk till en demo här (menyerna på sidan fungerar alltså inte och det är meningen), demon ligger här:

http://support.omnipilot.com/article_files/XMLHTTP_Selects/default.lasso

Ett mera grundläggande exempel om värdelistor (jag nämnde att man kan göra en sökning i en databas för att skapa en värdelista, men denna är alltså inte dynamisk):

Using FileMaker Pro value lists in static HTML forms.
http://www.lassosoft.com/Documentation/TotW/index.lasso?7351

Det här var bara snygg. Att skapa värdelistor med loopar:

Optimizing HTML Code Using [Loop] and [Iterate]
http://www.lassosoft.com/Documentation/TotW/index.lasso?7530

Senast redigerat 2009-05-01 11:46

Tack Ola för välbehövlig hjälp!

Jag har börjat arbeta med att få in en Filemaker Pro värdelista i ett statiskt HTML-formulär. Jag har en databastabell med personer. Dessa har bl.a. fälten "namn", "id" och "språk". Språk-fältet har kryssrutor där olika språkkompetenser kan klickas i. Jag vill sedan konstruera ett webbformulär som har ett fält kallat "kontaktperson". I det fältet vill jag visa alla personer ur min databas som har engelska som språkkompetens. Jag har skapat en självrelation i FIlemaker med ett beräkningsfält som har som beräkning: "engelska" och relaterar den till "språk" i två olika table-occurances. Jag testar att göra ett globalt fält som heter kontaktperson och tilldelar den en värdelista som visar namn på personer som följer relationen ovan. Det fungerar finfint så länge jag är kvar i FM.
Jag tog koden från sidan som du skickade med länken till:

<body>
[Inline: Database='your_database', Layout='your_layout', Show]
...
[/Inline]
</body>

Then, use following code to populate each pull-down menu with a value list.

<select name="Your_Field">
<option value=""></option>
[Value_List:'Your_Field']
<option value="[ValueListItem]">[ValueListItem]
[/Value_List]
</select>

Detta fungerade finfint. Haken var då att jag ville att Select-menyn enbart skulle visa relaterade värden (definierat i FM-värdelistan) och att en sak skulle visas i menyn (namn) och annat "value" skulle tilldelas fältet (id nummer). Jag hittade följande länk på ovanstående sida: http://www.lassosoft.com/Documentation/TotW/index.lasso?7350 . Den föreslår följande lösning:

Problem: Lasso does not include a function to generate value lists with differing value/text pairs. For example, Lasso can automatically generate this kind of HTML based on a value list ...

<option value="x">x

... but not this kind ...

<option value="x">y

Solution: create a calculation field in your FMPro database that creates the kind of HTML you need, then build a value list based on the calculated field.

For example, say you have a database with two fields. The first, which we'll call "id", is a serial number; the second, called "name", is the associated text name (obviously ;-). You then create a calculation field called "optionHTML" that reads like this:

"<option value=" & id & ">" & name

Afterwards, create a value list based on the "optionHTML" field (we'll call it "listOptionHTML". You can use the new value list in your Lasso files like this:

<select name=id>
<option value="">
[value_list: 'listOptionHTML']
[valueListItem, encodeNone]
[/value_list]
</select>

The resulting HTML might look like this:

<select name=id>
<option value="">
<option value=1>Text Line xyz
<option value=2>Text Line abc
</select>

Den verkade vara min perfekta lösning, men jag stötte på patrull.
Till att börja med är jag osäker på om inte databasen först måste påkallas i Inline-taggen som i det första citerade exemplet. Sedan får jag ett felmeddelande gällande taggen [valueListItem, encodeNone] som säger något i stil med: "expected end of tag but got "," instead". Testade då att sonika ta bort "encodeNone" från taggen. Då får jag upp formuläret, men själva menyn eller drop-down-boxen i formuläret är mycket kort och visar inga värden i sin meny. Har du någon idé om vad som kan ha gått snett?

Värelistor och Filemaker bygger på en sorts kommunikation mellan FileMaker och den layout i vilken värdelistan ifråga finns inplacerad på ett fält och Lasso. Lasso måste gå till FileMaker, till layouten och så att säga "titta" på den för att läsa av vilka fält som finns i layouten, vilka värdelistor som finns på dessa fält och vad de har för värden. Det är det som din inline i början gör, den innehåller kommandot -Show som är just det.

Varför inte helt enkelt göra en sökning i tabellen ifråga som innehåller namn och språkförmåga, vilket gör att du får fram både namn och nummer på personerna (från fältet namn och id tex, om du har något sådant). Sedan visar du dessa värden i en värdelista i HTML. Denna lösning skippar helt den "läsa av värdelista från filemaker-layouten genom att gå och kika på den" som value-list-taggen alltså är.

[Inline bla="bla" för="för" att="att" söka="söka" efter="efter" personer="personer" med="med" visst="visst" språk,="språk," språket="språket" är="är" lagrat="lagrat" i="i" en="en" variabel="variabel" som="som" du="du" satt="satt" längre="längre" upp="upp" någonstans="någonstans"]
<select name=id>
<option value="">
[Records]
<option value=[Field:'id']>[Field:'namn']
[/Records]
</select>
[/Inline]

Ungefär så. (Kod skriven ur mitt dåliga minne).

Jag provade ditt exempel strax efter att du hade postat instruktionen men fick det inte att fungera då. Projektet har tillfälligt lagts på is, men jag ska jobba vidare på det inom kort och postar mitt resultat då.

1
Bevaka tråden