JSON server - problem att få "node.save" att fungera med cck-fält

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
peteralex's picture

Hej!

Testar att använda Drupal som backend server där jag sparar information via jQuery Ajax anrop mot JSON servern.
Jag har problem att få 'node.save' att fungera med cck fält och undrar om någon av er som lyckats bättre.
Följande node objekt fungerar:

 {"type":"mytype","title":"My Title","uid":1,"name":"admin"}

Men försöker jag lägga till ett cck fält så får jag problem. Exempelvis följande node objekt lyckas ej sparas:

{"type":"mytype","title":"My Title","uid":1,"name":"admin","field_author":"[{\"value\":\"Sigge\"}]" }

eller:

{"type":"mytype","title":"My Title","uid":1,"name":"admin","field_author":"[ [{\"value\":\"Sigge\"}] ]" }

eller:

 {"type":"mytype","title":"My Title","uid":1,"name":"admin","field_author":[{"value":"Sigge"}] }

Däremot lyckas jag spara noden med följande objekt:

 {"type":"mytype","title":"My Title","uid":1,"name":"admin","field_author":[ [{"value":"Sigge"}] ] }

men inget värde skrivs in i fältet 'field_author'.

Tydligen har det varit lite strul med 'decoding' i 'services' modulen, men jag har provat att patcha enligt:

 http://drupal.org/node/945788

Enligt inlägget så verkar man ha fixat problemet, men likväl så får jag det inte att fungera.
Jag kör med följande versioner:
- Services 6.x-2.x-dev (med patchad node_service.module enl.945788)
- JSON server 6.x-2.0-alpha2

Idéer eller förslag någon?

Comments

fabsor's picture

Hej!

Det här kanske kan hjälpa dig lite på vägen: node.save (node_service_save) förväntar sig att få in data som är formatterad likadant som den data som man får in när man postar ett formulär när man skapar eller editerar en ny nod. Det betyder att den json-data du skickar in måste vara formatterad likadant strukturmässigt.

Om du är osäker på hur datan ska se ut sätt en brytpunkt (eller printa ut arrayen) i den här funktionen och se hur $form_state['values'] ser ut. Exakt den datan ska du peta in genom json-servern.

Hoppas det där hjälper någonting!

//Fabian Sörqvist

Tack för tipset!

peteralex's picture

Jag kan se att cck fältet består av en associativ array med index strängen 'value' som pekar på mitt fältvärde, denna array ingår sedan som första elementet i ytterligare en array. print_r ger följande representation:

[field_author] => Array ( [0] => Array ( [value] => Sigge [_error_element] => field_author][0][value ) )

Enligt övriga inlägg och exempel så skulle cck fältdata representeras enligt följande sätt när man skickar in till JSON server:

"field_author": [ [{"value":"Sigge"}] ] 

print_r ger då representation:

[field_author] => Array ( [0] => Array ( [0] => stdClass Object ( [value] => Sigge ) [value] => [_error_element] => field_author][0][value ) )

Vilket inte överensstämmer med formatet som 'node_form_submit()' vill ha.
Om jag istället skapar upp js arrayen enligt följande sätt:

var author = new Array();
author[0] = new Array();
author[0]['value'] = 'Sigge';
....
"field_author": author

print_r ger då representation:

[field_author] => Array ( [0] => Array ( [value] => [_error_element] => field_author][0][value ) ) 

Allt ser rätt ut, förutom att strängen 'Sigge' ej kommer med :-(
Jag har även provat ett stort antal andra alternativ. Jag har även provat att JSON decoda cck värdet (author), dvs. gjort om det till en strängrepresentation på samma sätt som man gör med själva nod objektet innan man skickar in det till JSON servern, dock utan framgångsrikt resultat.
Jag får ge mig för ikväll, men mottar gärna förlag eller idéer...