[gelöst] Daten aus Profil lesen
Eingetragen von ronald (3854)
am 02.07.2014 - 07:37 Uhr in
am 02.07.2014 - 07:37 Uhr in
Ich habe im Userprofil ein neues Feld angelegt, weil ich dies für ein Modul benötige.
Dieses Feld darf mehrfach (5 mal) genutzt werden.
Schreibe ich dort etwas hinein, erscheint es auch im Userprofil.
Wie komme ich aber in meinem Modul an dieses Feld heran?
Ich habe gehofft, dass es im $user Objekt landet. Tut es aber nicht.
- Anmelden oder Registrieren um Kommentare zu schreiben
Hi Ronald, was gibt denn das
am 02.07.2014 - 08:34 Uhr
Hi Ronald,
was gibt denn das devel Modul aus? Da es angezeigt wird!???, sollte es im render erscheinen oder?
seltsame Geschichte
am 02.07.2014 - 09:19 Uhr
Ich habe am Anfang des Moduls
global $user
stehen.Dennoch bekomme ich eine Fehlermeldung, wenn ich $user anspreche (variable nicht gefunden).
Schaue ich mir das Profil an, finde ich unter den Userdaten
field_meinevariable-und-0-value
und darin meinen Feldinhalt.Spreche ich aber $user['field_meinevariable']['und'][0]['value'] an, bekomme ich die Felermeldung, dass $user unbekannt wäre.
In Objektschreibweise $user->field_meinevariable ... lässt es sich auch nicht ansprechen.
Ich mache irgendetwas grundlegendes falsch.
Dass Du global $user
am 02.07.2014 - 09:37 Uhr
Dass Du global $user verwendest ist richtig. Nutzte Dir aber nur wenig wenn Du diese nicht innerhalb deiner Funktion aufrufst.
Wahrscheinlich hast Du folgendes gemacht:
<?php
...
global $user;
...
function bla(...){
$X = $user->...
[oder]
$X = $user[...]...
}
?>
Stattdessen:
<?php
function bla(...){
global $user;
$X = $user->name;
}
?>
tja - ich dachte das Schlüsselwort global
am 02.07.2014 - 10:10 Uhr
reicht aus um es modulweit global zu definieren.
Ich probiere es nachher aus.
OK - ich habe zwar das Userobjekt, kann aber dort nicht auf zusätzliche Variablenfelder zugreifen.
Diese werden offensichtlich nicht mitgeladen.
global $user st sogar
am 02.07.2014 - 09:59 Uhr
global $user st sogar systemweit definiert, sonst könntest Du sie gar nicht aufrufen. Kommt aus dem bootstrap von drupal.
Aber das ist eine php Frage, keine drupal Frage. Du musst die Variablen innerhalb einer Funktion entweder definieren, bspw.
<?php
function bla(){
$x = ""; //string
$x = 0; // Zahl
...
}
?>
oder Du musst sie in deiner Funktion aufrufen.
bspw.
<?php
function bla(){
$x = function blubb(); //aus anderer Funktion aufgerufen
global $user; // Objekt User aufgerufen
...
}
?>
ok - klappt dennoch nicht
am 02.07.2014 - 10:13 Uhr
Ich hatte die Hoffnung, dass dies Drupal mir abnimmt.
Aber ist wurst, weil im $user offenbar die bundled fields nicht enthalten sind, und gesondert geladen werden müssen.
Dafür gibt es aber doch sicherlich eine Standardmethode im core, oder?
dpm ($user);
am 02.07.2014 - 10:26 Uhr
dpm ($user); ???
drupal_set_message(print_r($user,1)); ???
Das kommt raus
am 02.07.2014 - 12:32 Uhr
Sicherheitsrelevante Inhalte habe ich verändert
uid (String, 1 characters ) 1 name (String, 5 characters ) admin pass (String, 55 characters )Hier steht das verschlüsselte Passwort, das niemanden etwas angehtmail (String, 20 characters ) xxxx theme (String, 6 characters ) bartik signature (String, 0 characters ) signature_format (String, 13 characters ) filtered_html created (String, 10 characters ) xxxx3 access (String, 10 characters ) xxxx login (String, 10 characters ) xxxxx status (String, 1 characters ) 1 timezone (String, 12 characters ) Europe/Paris language (String, 2 characters ) de picture (String, 1 characters ) 0 init (String, 20 characters ) xxxxx data (Array, 7 elements)
ckeditor_default (String, 1 characters ) t | (Callback) t(); ckeditor_show_toggle (String, 1 characters ) t | (Callback) t(); ckeditor_width (String, 4 characters ) 100% ckeditor_lang (String, 2 characters ) en ckeditor_auto_lang (String, 1 characters ) t | (Callback) t(); contact (Integer) 1 overlay (Integer) 1 sid (String, 43 characters ) xxxxx ssid (String, 0 characters ) hostname (String, 15 characters ) meine aktuelle IP timestamp (String, 10 characters ) xxxxx cache (String, 1 characters ) 0 session (String, 0 characters ) roles (Array, 2 elements)
Das Zusatzfeld blaccounts ist nicht enthalten.
Komisch. Gehe mal auf deinen
am 02.07.2014 - 11:23 Uhr
Komisch. Gehe mal auf deinen account, editiere ihn und wirf das devel modul an. Da MUSS das Feld drin sein.
Also devel ist aktiviert nehme ich an, sonst vorher devel laden. Ich sehe jedes Feld bei mir. Egal welches Projekt.
soe siehts aus, wenn ich im Profil bin
am 02.07.2014 - 12:30 Uhr
So schauts im Profil aus.
Da ist das Element zu finden.
Nur, wie greife ich von einem anderen Modul aus darauf zu?
content (Array, 5 elements)
blorderchk_resultbox (Array, 5 elements)
#markup (String, 5 characters ) admin #contextual_links (Array, 1 element) block (Array, 2 elements) 0 (String, 28 characters ) admin/structure/block/manage 1 (Array, 2 elements) 0 (String, 10 characters ) flöd 1 (String, 9 characters ) resultbox #block (Object) stdClass bid (String, 2 characters ) 98 module (String, 10 characters ) blorderchk delta (String, 9 characters ) resultbox theme (String, 6 characters ) bartik status (String, 1 characters ) 1 weight (String, 1 characters ) 0 region (String, 7 characters ) content custom (String, 1 characters ) 0 visibility (String, 1 characters ) 0 pages (String, 0 characters ) title (String, 0 characters ) cache (String, 2 characters ) -1 subject (String, 26 characters ) Results of the order query #weight (Integer) 1 #theme_wrappers (Array, 1 element) 0 (String, 5 characters ) block system_main (Array, 13 elements)
field_fld (Array, 16 elements)
#theme (String, 5 characters ) field #weight (Integer) 1 #title (String, 10 characters ) fldlbl #access (Boolean) TRUE #label_display (String, 5 characters ) above #view_mode (String, 4 characters ) full #language (String, 3 characters ) und #field_name (String, 16 characters ) field_tfld #field_type (String, 4 characters ) text #field_translatable (String, 1 characters ) 0 #entity_type (String, 4 characters ) user #bundle (String, 4 characters ) user #object (Object) stdClass
uid (String, 1 characters ) 1 name (String, 5 characters ) admin pass (String, 55 characters ) gelöschtes Passwortmail (String, 20 characters ) xxxx theme (String, 6 characters ) bartik signature (String, 0 characters ) signature_format (String, 13 characters ) filtered_html created (String, 10 characters ) xxxxx access (String, 10 characters ) xxxxx login (String, 10 characters ) xxxxx status (String, 1 characters ) 1 timezone (String, 12 characters ) Europe/Paris language (String, 2 characters ) de picture (NULL) init (String, 20 characters ) xxxxe data (Array, 7 elements)
ckeditor_default (String, 1 characters ) t | (Callback) t(); ckeditor_show_toggle (String, 1 characters ) t | (Callback) t(); ckeditor_width (String, 4 characters ) 100% ckeditor_lang (String, 2 characters ) en ckeditor_auto_lang (String, 1 characters ) t | (Callback) t(); contact (Integer) 1 overlay (Integer) 1 roles (Array, 2 elements)
2 (String, 18 characters ) authenticated user 3 (String, 13 characters ) administrator field_counter (Array, 0 elements) field_fld (Array, 1 element)
und (Array, 1 element)
0 (Array, 3 elements)
value (String, 7 characters ) xxxx format (NULL) safe_value
Da ich gerade an einem
am 02.07.2014 - 11:48 Uhr
Da ich gerade an einem ähnlichen Problem arbeite, habe ich mich an eine Funktion erinnert: user_load($uid). Mit
<?php
global $user;
$account = user_load($user->uid);
?>
global $user;
alleine reicht also nicht.Sorry, habe ich vergessen
am 02.07.2014 - 11:53 Uhr
Sorry, habe ich vergessen zuschreiben.
Uff - geschafft
am 02.07.2014 - 12:26 Uhr
dann will er genau diese Form:
$account->field_blaccounts['und'][0]['value']
damit das ganze SISCHER ist:
am 02.07.2014 - 12:45 Uhr
damit das ganze SISCHER ist: field_get_items ist zu bevorzugen.
dann brauche ich den Load nicht?
am 02.07.2014 - 13:26 Uhr
wie sieht dann der Aufruf aus?
Wenn es mehrere Einträge gibt, erhalten ich dann ein Array der Werte?
Ich wurde aus der Beschreibung der API nicht ganz schlau, und habe gerade keine Zeit zum Probieren.
Lieber Ronald
am 02.07.2014 - 13:50 Uhr
irgendwann musst Du schon mal ins eigenständige Lernen kommen!
Hier ein Beispiel:
http://www.drupalcenter.de/node/49117