Drupalにユーザー設定を保存する


7

最近、を使用しfunction hook_form_user_profile_form_alter(&$form, &$form_state)てユーザー設定をキャプチャし、を使用してそれらを保存するモジュールを開発しましたfunction hook_user_presave(&$edit, $account, $category)。次に、モジュールで$ user-> data ['field']を使用してデータにアクセスしました。それはうまくいきました。

しかし、今は(ユーザープロファイルフォームではなく)別のフォームを使用して同じ設定を保存したいと思います。それで、それらを保存する他のフックはありますか?

各ユーザーに、ユーザープロファイルを保存できるページ(ユーザープロファイル以外のフォーム)へのリンクを提供したいと思います。

前もって感謝します。

回答:


8

API関数を使用するために必要なフックを使用する必要はありませんuser_save()。他のすべての保存関数とは異なり、変更したいものに対して個別の引数があるため、これは非常に奇妙な関数です。

送信コールバックで、次のようなものが機能するはずです。

<?php
// Make sure you are working with the fully loaded user object.
$account = user_load($GLOBALS['user']->uid);
$edit['data']['your_stuff'] = $whatever;
user_save($account, $edit);
?>

参考:user_save()はDrupal 8ではなくなり、代わりに、$ accountを変更した後に$ account-> save()を呼び出すことにより、8.xの他のすべてのエンティティ保存関数/メソッドと同様に動作します。詳細については、次の変更レコードを参照してください:http : //drupal.org/node/1554986


1
また、uidを参照する別のテーブルに情報を保存することも検討してください。欠点は、情報がデフォルトでロードされないことですが、プラス面は常にロードする必要はなく、直接クエリできることです(たとえば、ロードせずにuidに基づいてユーザーの設定を確認できます)。オブジェクト全体)。
Berdir

どうもありがとう 。コードが機能しました。ユーザーの好みの数がもっと多い場合は、別のテーブルを使用します:)
Sandesh Yadav '18 / 06/18

1
もちろんそうします 。しかし、私は今のところ8つの評判しかなく、投票には15が必要です。15に達したら投票します:)
Sandesh Yadav

0

検証と送信機能を備えたフォームAPIを使用して、いつでも独自のフォームを作成し、必要な場所にデータを保存できます。これは、ユーザー関連のデータに最適な場所と思われるため、ユーザーデータ配列にも含まれる可能性があります。スキーマAPIを使用して独自のテーブルを作成することもできます。フォームの「送信」機能は、あなたが探している「フック」だと思います。

フォームAPI:http : //api.drupal.org/api/drupal/includes%21form.inc/group/form_api/7

スキーマAPI:http : //api.drupal.org/api/drupal/includes%21database%21schema.inc/group/schemaapi/7


フォームを作成するのが快適です。しかし、ユーザーデータに保存することはできません。フォーム送信では、これを達成するにはどうすればよいですか?私はuser_presaveでそれを信じていますが、このコンテキストでそれを使用する方法がわかりません。
Sandesh Yadav
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.