フィールドの値の参照やアップデートをNode上のPHPから行う方法

Events happening in the community are now at Drupal community events on www.drupal.org.
redboxhosting's picture

お世話になります。

Drupal7を利用しており初歩的なことかもしれませんが、アドバイスいただけると助かります。

PHPコードを有効にしたNODE上で、既に作成しているフィールド値の参照、またはフィールドを別の値で上書きをしようと考えているのですがそのようなことは可能でしょうか。※あまりDrupalの仕組みやPHPに詳しくありません。

フィールド値の参照についてはひとまず以下のモジュールを導入し、
トークン値を入れることによって実現できておりますが、これらが正しいかどうか不明です。

https://www.drupal.org/project/field_tokens

入力した値: [current-user:field_test1]

アカウントセッティングにてアカウント毎のフィールドを複数作成し、
NODE上に設置したボタンを押すと、フィールドを参照もしくは特定の値で上書き
する動作が実現できればと考えています。

宜しくお願いします。

Comments

php書かなくてもできるかも

blauerberg's picture

仕組み的には可能で難易度もそんなに高くないです。

ちなみに、やりたいこととしては

  • (1). ノードのフィールドの値をユーザーのフィールドの値として設定したい
  • (2). ユーザーのフィールドの値をノードのフィールドの値として設定したい

のどちらになるでしょうか?
実現したい事とどういうUIにしたいか次第なのですが、もしかするとphpコードを全く書かずにできるかもしれません。

ご連絡ありがとうございます。 (1).

redboxhosting's picture

ご連絡ありがとうございます。

(1). ノードのフィールドの値をユーザーのフィールドの値として設定したい
(2). ユーザーのフィールドの値をノードのフィールドの値として設定したい

2のユーザーのフィールド値をノードのフィールド値にしたい 
というのが正しいかも知れません。

フィールド値はユーザー毎にユニークな値が入るため、
AさんのAフィールドには1
BさんのAフィールドには2

というように値がユーザー毎に個別となるような認識です。

一応以下の様なPHPを書くことによって実現できてるようなのですが、PHPを書かなくてもできるのでしょうか。

1:アカウントにテキストフィールドを作成後、Nodeに以下のPHPを埋め込む。

global $user;
$uid = $user->uid;
$user_fields = user_load($user->uid);
$user_fields->フィールド名['und'][0]['value'] = $uid;
user_save($user_fields);

このようにすると一応ログインしたユーザーID番号がそのアカウントのフィールド値に入るようになりました。

ちなみに、(1). ノードのフィールドの値をユーザーのフィールドの値として設定したい
ということは可能なのでしょうか。

認識としてはNodeのフィールドは全ユーザー共有となってしまうのでは無いかと思っていました。

宜しくお願いします。

blauerberg's picture

貼っていただいたコードだと、「ノードにアクセスした時にログイン中のユーザーIDを"フィールド名"の値に設定する」という動作ですね。

これであれば Rules というモジュールを使えばコードを書かずにできます。
https://www.drupal.org/project/rules

試しにユーザーに "field_test" というフィールドを追加し、「ノード1にアクセスした時にログイン中のユーザーの field_test の値を ユーザーの uid で更新する」というルールを書いてみたところ、うまく動作しました。

Rulesは定義のインポート・エクスポートができるので、私の手元で動いた定義をエクスポートしたものをgistに置きましたので、参考にどうぞ。
https://gist.github.com/blauerberg/a752c349628cc115f53c5c75514bfe9f

RulesとRules本体についているRules UIモジュールを有効にした後、 /admin/config/workflow/rules/reaction/import に貼り付けて保存すればインポートされます。

Rulesの使い方については、Studio UMIの後藤さんの記事が非常に参考になります (ありがとう後藤さん!)。
https://drupal.studio-umi.jp/blog/module/rules

redboxhosting's picture

有り難うございます。

Rulesでもユーザーフィールド内に値をかきこむことが出来るんですね!

サンプルのRulesも参考になりました。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: