1

私は Drupal (7) と PHP に比較的慣れていないので、これまでの質問で必要なものを見つけることができなかったので、これは少し基本的な質問かもしれません。

データを取得して投稿するために単純な CRUD REST Web サービス (.net 4) に接続する drupal サイトがあります。

Web サイトから取得したデータを単純な drupal 形式にロードする方法を判断するのが難しいと感じています。データは JSON 形式で転送されますが、応答配列からデータを取得し、Web サイトから取得したデータをフォームのフィールドに入力する方法がわかりません。返された JSON フィールドがフォーム フィールド名と一致すると仮定します。

私の例では、送信機能に http_request があり、実際にはページ読み込み機能にあるはずです。

質問は次のとおりです。取得したデータからフォームのフィールドにデータを入力する方法は? json_array からデータを取得する構文は何ですか? ページの読み込み時にデータを取得する必要があります。これを達成する最善の方法は何ですか?

ここにサンプルコードがあります。私は提出で遊んでいます。再構築しましたが、これは画面上のデータを永続化するための最良の方法ですか? 「姓」フィールドを新しい値にリセットしようとしましたが、喜びはありません..

<?php

/**
* @file
* Test activation form
*/

/**
* Implements hook_menu()
*/
function activation_menu() {
  $items['activation'] = array(
  'title' => 'Registration form',
  'page callback' => 'drupal_get_form',
  'page arguments' => array('activation_nameform'),
  'access callback' => TRUE,
 // 'access_callback' => TRUE,
  'type' => MENU_NORMAL_ITEM
  );
  return $items;
  }

/**
* Define the form
*/
function activation_nameform() {
$form['Firstname'] = array(
'#Firstname' => t('Firstname'),
'#type' => 'textfield',
'#maxlength'=> 50,
'#description' => t('Please enter your First name.'),
);

$form['Surname'] = array(
'#Surname' => t('Surname'),
'#type' => 'textfield',
'#maxlength'=> 50,
'#description' => t('Please enter your Surname.'),
);

$form['Username'] = array(
'#Username' => t('Username'),
'#type' => 'textfield',
'#maxlength'=> 100,
'#description' => t('Please enter your Username.'),
);
$form['Password'] = array(
'#Password' => t('Password'),
'#type' => 'textfield',
'#maxlength'=> 8,
'#description' => t('Please enter your Surname.'),
);

$form['Organisation'] = array(
'#Organisation' => t('Organisation'),
'#type' => 'textfield',
'#maxlength'=> 50,
'#description' => t('Please enter your Organisation.'),
);

$form['Address1'] = array(
'#Address1' => t('Address1'),
'#type' => 'textfield',
'#maxlength'=> 150,
'#description' => t('Please enter your first full line of Address.'),
);

$form['Address2'] = array(
'#Address2' => t('Address'),
'#type' => 'textfield',
'#maxlength'=> 150,
'#description' => t('Please enter your second full line of Address.'),
);

$form['Town_city'] = array(
'#Town_city' => t('Town_city'),
'#type' => 'textfield',
'#maxlength'=> 50,
'#description' => t('Please enter your Town or City.'),
);

$form['Region'] = array(
'#Region' => t('Region'),
'#type' => 'textfield',
'#maxlength'=> 50,
'#description' => t('Please enter your Region.'),
);

$form['PostCode'] = array(
'#PostCode' => t('PostCode'),
'#type' => 'textfield',
'#maxlength'=> 10,
'#description' => t('Please enter your PostCode.'),
);



$form['Postcode'] = array(
'#Postcode' => t('Postcode'),
'#type' => 'textfield',
'#maxlength'=> 15,
'#description' => t('Please enter your Postcode or ZIP code.'),
);

$form['Country_options'] = array(
'#type' => 'value',
'#value'=> array(t('UK'),t('Europe'),t('USA')),
);

$form['Country']['favourite_country'] = array(
'#title' => t('Favourite Country'),
'#type' => 'select',
'#value'=> array(t('UK'),t('Europe'),t('USA')),
'#description' => t('Please enter your Country'),
'#options' => $form['Country_options']['#value']
);

$form['Status'] = array(
'#Status' => t('Status'),
'#type' => 'textfield',
'#maxlength'=> 150,
'#description' => t('Please enter your first full line of Address.'),
);

$form['Add_credits'] = array(
'#Add_credits' => t('Add_credits'),
'#type' => 'textfield',
'#maxlength'=> 15,
'#description' => t('Please enter additional credits'),
);


$form['TandC'] = array(
'#TandC' => t('TandC'),
'#type' => 'textfield',
'#maxlength'=> 5,
'#description' => t('TandC'),
'#value'=> 30
);

$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit')
);
return $form;
}


/**
* Handle post - validation form submission
*/
function activation_nameform_submit($form,&$form_state) {
$name = $form_state['values']['Firstname'];
drupal_set_message(t('Thanks ,%name',
array('%name' => $name)));
$request = drupal_http_request('http://somewebsite.com/Customers/?ID=10');
$jsonarray =drupal_json_decode($request->data);

$form_state['rebuild']=TRUE;
$form['Surname']['#value']='Hello mother';

}

を使った回答の続き

echo '<pre>';var_dump($request); echo '</pre>'

リクエスト情報を確認できるようになりました。

["data"]=>
  string(346) "?{"CustomerID":10,"FirstName":"Howard Philip","LastName":"Lovecraft","Organisation":"superglue","AddressID":null,"Status":0,"Credits":0,"Type":0,"ExpiryDate":"0001-01-01T00:00:00","UserName":"xxx@hotmail.com","Password":"","CustomerIconURL":"","CountryCode":"","LastUpdated":null,"DateCreated":"2013-04-18T07:43:10.123","ApplicationID":null}"
  ["protocol"]=>
  string(8) "HTTP/1.1"
  ["status_message"]=>
  string(2) "OK"
  ["headers"]=>
  array(6) {
    ["content-length"]=>
    string(3) "346"
    ["content-type"]=>
    string(31) "application/json; charset=utf-8"
    ["server"]=>
    string(17) "Microsoft-IIS/7.5"
    ["x-powered-by"]=>
    string(7) "ASP.NET"
    ["date"]=>
    string(29) "Fri, 14 Jun 2013 12:00:35 GMT"
    ["connection"]=>
    string(5) "close"
  }
  ["code"]=>
  string(3) "200"
}

したがって、以下の提案を実装します...

4

2 に答える 2

1

..したがって、質問に対する完全な回答は、以下に示すフィールドにデータを入力するためのコードです/**

* Define the form
*/
function activation_nameform() {
$request = drupal_http_request('http://somewebsite.com/ML5/MLSvrSvc.svc/Customers/?ID=10');
$jsonarray = $request->data; 
//$jsonarray =json_decode('{"CustomerID":10,"FirstName":"Howard Philip","LastName":"Lovecraft","Organisation":"superglue","AddressID":null,"Status":0,"Credits":0,"Type":0,"ExpiryDate":"0001-01-01T00:00:00","UserName":"xxx@hotmail.com","Password":"","CustomerIconURL":"","CountryCode":"","LastUpdated":null,"DateCreated":"2013-04-18T07:43:10.123","ApplicationID":null}',TRUE);
echo '<pre2>';var_dump($jsonarray); echo '</pre2>';

$form['Firstname'] = array(
'#Firstname' => t('FirstName'),
'#type' => 'textfield',
'#maxlength'=> 50,
'#description' => t('Please enter your First name.'),
'#default_value' => $jsonarray['FirstName'],
);
.
.
.etc

ただし、Windows 7/.net 64 ビット システムからの json には解析の問題があるため、テスト json 文字列です...ほとんどの utf8 エンコーディング関数と preg_replace の例を試しましたが、今日も喜びはありません...おそらく別の質問です。

于 2013-06-14T16:01:00.730 に答える