web-dev-qa-db-ja.com

user_save()を使用してdrupalgapのユーザーフィールド(エンティティ参照)をプログラムで変更しますか?

アプリの作成にはDrupalGapを使用しています。ユーザーがボタンを押すことで「チェックイン」できるようにするノード(コンテンツタイプ充電ステーション)があります。これまで、DrupalGapのノードページに、onClickイベントで関数を実行するボタンを作成しました。

この関数は、ユーザーにチェックインさせたいノードであるNIDを受け取ります。次に、エンティティ参照フィールドである「checked_in_chargingstation」と呼ばれるユーザーのフィールドがあります。

DrupalGapのドキュメントには、user_updateに関する情報はあまりありません。 「...」とだけ書かれています。しかし、NIDを渡すことでノードを更新できるようです。だから私はユーザーにも同じことができると思いましたか?しかし、それは機能していないようです。成功のアラートが表示されますが、ユーザーの変更を確認できません。

チェックインコード。 Drupal.user.uidは現在のユーザーのuidを取得します。

function check_in($nid){
  var $field_checked_in_chargingstation = {};
  $field_checked_in_chargingstation["und"] = {
    target_id: $nid,
  };

  var user = {
    uid: Drupal.user.uid,
    field_checked_in_chargingstation: $field_checked_in_chargingstation,
  }

  user_save(user, {
    success:function(result){
      console.log(result);
    }
  });
}

コンソールで私は得ます:

Console.log()

私が見ることができるjsonを見て:

"field_checked_in_chargingstation": {
 "und": [
  {
   "target_id": "29088"
  }
 ]
},

しかし、これは間違ったIDです。これは以前にDrupalと "edit"ユーザーから割り当てた古いノードです。そのため、更新されていないようです。ccをすべてDrushしようとしても、機能していないようです。

アプリからユーザーを編集しようとすると、エンティティ参照フィールドにnull値しか表示されません。 Drupalgapのドキュメントでの1つの提案は、エンティティ参照ビューを作成することです http://docs.drupalgap.org/7/Entities/Entity_Reference 私もこれを行いました。

これが少し長い場合は申し訳ありません。また、Stack Exchangeに投稿するか、DrupalGapの問題として投稿するかはわかりません。

2
Ronjark

これは、[表示の管理]ページのエンティティ参照フィールドに選択したウィジェットに大きく依存します。作業が最も簡単なウィジェットはAutocompleteウィジェットで、この時点でこのJSONを送信します。

"field_checked_in_chargingstation": {
 "und": [
  {
   "target_id": "... (29088)"
  }
 ]
},

サービスモジュールはDrupalのフォームシステムと連動しているため、フィールドのウィジェットを変更すると、Drupalに送信する必要があるJSONデータが変わる可能性があります。

2