Speichern von Benutzereinstellungen in Drupal

7

Ich habe kürzlich ein Modul entwickelt, in dem ich die function hook_form_user_profile_form_alter(&$form, &$form_state)Benutzereinstellungen erfasst und mit gespeichert habe function hook_user_presave(&$edit, $account, $category). Dann habe ich mit $ user-> data ['field'] in einem Modul auf die Daten zugegriffen. Das hat gut funktioniert.

Aber jetzt möchte ich die gleichen Einstellungen mit einem anderen Formular speichern (nicht mit dem Benutzerprofilformular). Gibt es also einen anderen Haken, um sie aufzubewahren?

Ich möchte jedem Benutzer einen Link zu der Seite (Formular außer dem Benutzerprofil) geben, auf der er seine Einstellungen speichern kann.

Danke im Voraus.

Sandesh Yadav
quelle

Antworten:

8

Sie müssen keinen Hook verwenden, um die API-Funktion zu verwenden user_save(). Dies ist eine sehr seltsame Funktion, da sie im Gegensatz zu allen anderen Speicherfunktionen ein separates Argument für die Dinge hat, die Sie ändern möchten.

So etwas sollte in Ihrem Rückruf funktionieren:

<?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);
?>

Zu Ihrer Information: user_save () ist in Drupal 8 nicht mehr vorhanden und verhält sich stattdessen wie alle anderen Funktionen / Methoden zum Speichern von Entitäten in 8.x, indem Sie $ account-> save () aufrufen, nachdem Sie $ account geändert haben. Weitere Informationen finden Sie im folgenden Änderungsdatensatz: http://drupal.org/node/1554986

Berdir
quelle
1
Möglicherweise möchten Sie Ihre Informationen auch in einer separaten Tabelle speichern, die auf die UID verweist. Nachteil ist, dass die Informationen nicht standardmäßig geladen werden, aber das Plus ist, dass sie nicht ständig geladen werden müssen und Sie sie direkt abfragen können (z. B. überprüfen Sie die Einstellung eines Benutzers basierend auf der UID, ohne sie laden zu müssen das ganze Objekt).
Berdir
Vielen Dank . Ihr Code hat funktioniert. Ich werde eine separate Tabelle verwenden, wenn die Anzahl der Einstellungen des Benutzers höher ist :)
Sandesh Yadav
1
natürlich werde ich . Aber ich habe momentan nur 8 Ruf und 15 sind für die Abstimmung erforderlich. Ich werde upvote, nachdem ich 15 erreicht habe :)
Sandesh Yadav
0

Nun, Sie können jederzeit Ihr eigenes Formular mithilfe der Formular-API mit einer Validierungs- und Übermittlungsfunktion erstellen und die Daten speichern, wo immer Sie möchten. Dies könnte sich auch im Benutzerdatenarray befinden, da es der perfekte Ort für benutzerbezogene Daten zu sein scheint. Sie können auch eine eigene Tabelle mit der Schema-API erstellen. Ich denke, die "Senden" -Funktion für das Formular ist der "Haken", den Sie suchen.

Formular-API: http://api.drupal.org/api/drupal/includes%21form.inc/group/form_api/7

Schema-API: http://api.drupal.org/api/drupal/includes%21database%21schema.inc/group/schemaapi/7

Mikewink
quelle
Ich fühle mich wohl, wenn ich Form schaffe. Ich kann es jedoch nicht in Benutzerdaten speichern. Was soll ich tun, um dies zu erreichen? Ich glaube, es ist etwas mit user_presave, aber ich weiß nicht, wie ich es in diesem Zusammenhang verwenden soll.
Sandesh Yadav