Posted by redboxhosting on November 30, 2016 at 4:14am
お世話になります。
Drupal7を利用しており初歩的なことかもしれませんが、アドバイスいただけると助かります。
PHPコードを有効にしたNODE上で、既に作成しているフィールド値の参照、またはフィールドを別の値で上書きをしようと考えているのですがそのようなことは可能でしょうか。※あまりDrupalの仕組みやPHPに詳しくありません。
フィールド値の参照についてはひとまず以下のモジュールを導入し、
トークン値を入れることによって実現できておりますが、これらが正しいかどうか不明です。
https://www.drupal.org/project/field_tokens
入力した値: [current-user:field_test1]
アカウントセッティングにてアカウント毎のフィールドを複数作成し、
NODE上に設置したボタンを押すと、フィールドを参照もしくは特定の値で上書き
する動作が実現できればと考えています。
宜しくお願いします。
Comments
php書かなくてもできるかも
仕組み的には可能で難易度もそんなに高くないです。
ちなみに、やりたいこととしては
のどちらになるでしょうか?
実現したい事とどういうUIにしたいか次第なのですが、もしかするとphpコードを全く書かずにできるかもしれません。
ご連絡ありがとうございます。 (1).
ご連絡ありがとうございます。
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のフィールドは全ユーザー共有となってしまうのでは無いかと思っていました。
宜しくお願いします。
Rulesを使うとコードを書かずにできそうです
貼っていただいたコードだと、「ノードにアクセスした時にログイン中のユーザー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
有り難うございます。 Rulesでもユーザーフィールド内に
有り難うございます。
Rulesでもユーザーフィールド内に値をかきこむことが出来るんですね!
サンプルのRulesも参考になりました。