2009-08-18 11 views
2

Wie verwenden Sie profile_save_profile?Drupal 6: Programmgesteuertes Ändern von Benutzerwerten

foreach ($users as $user) { //list of users to act on 
    $by_user = views_get_view_result('attendance', 'page_3', array($user->uid)); //view containing info about this user 
    $edit = array('profile_attendance_short_term' => substr(count($by_user)/count($general), 0, 5)); //calculation 

    profile_save_profile($edit, $user->uid, 'Fencing Information', TRUE); //update user profile??? 
} 

Was mache ich falsch?

EDIT: Dies auch nicht:

$edit = array('profile_attendance_short_term' => 9001); 

profile_save_profile($edit, user_load(3), 'Fencing Information', TRUE); 
+0

Ist die Berechnung, die in dem $ auftritt Zuordnungszeile bearbeiten funktioniert OK (keine Division durch Null oder ähnliches)? Können Sie Fehlermeldungen teilen? –

+0

Die Berechnung druckt Zahlen zwischen 0 und 1. Es gibt keine Fehlermeldungen. Früher hieß es "Sie können Variablen nur per Referenz übergeben", was ich mit der Variablen $ edit anstelle des array() direkt gelöst habe. –

Antwort

3

ich glaube, das Problem ist, dass Sie $register (der letzte Parameter) als TRUE sind angeben. Diese Option wird nur beim Erstellen neuer Konten verwendet. Wenn diese Option aktiviert ist, können Sie nur die auf der Registrierungsseite verfügbaren Profilfelder speichern, was wahrscheinlich nicht Ihren Wünschen entspricht.

Da es kein erforderlicher Parameter ist, können Sie es einfach weglassen.

Wenn es um das Format bearbeiten kommt, erwartet er das gleiche Format wie die $form_state['values'] Sie, wenn die Werte haben würden, wo aus einem Formular, zum Beispiel:

<?php 
$edit = array(
    'fencing_style' => 'Aggressive', 
    'favorite_weapon' => 'sabre', 
    'left_handed' => FALSE, 
); 
profile_save_profile($edit, $user, 'Fencing Information'); 
+0

yessss danke. –

+1

bedeutet das, dass die ' Fencing Information 'Kategorie wird auf $ edit gesetzt und überschreibt andere Werte (die nicht in $ edit eingegeben werden können)? Ich habe zwei separate Funktionen, die verschiedene Werte in' Fencing Information 'verwenden. Wenn man läuft, löscht es die Werte von andere –

+1

Yeah, profile_save_profile() überschreibt alle vorhandenen Werte - nicht sehr elegant: http://api.drupal.org/api/function/profile_save_profile/6 Das Profilmodul ist eine der dunkleren Ecken von Drupal API, und es wurde komplett in Drupal 7 neu gemacht - so wird es viel einfacher zu arbeiten - Flexibilität und Erweiterbarkeit. – mikl

0

am profile_save_profile Funktion Sehen, es sieht aus wie es $ Benutzer erwartet in anstatt vom Benutzer $ weitergegeben werden> uid - so versuchen, Ihren Anruf zu modifizieren folgt als:

profile_save_profile($edit, $user, 'Fencing Info', TRUE); 
+0

Ich tat das und änderte 'Fencing Info' zu 'Fencing Information' (die richtige Kategorie. Es funktioniert immer noch nicht. In welcher Form muss $ edit sein? –

Verwandte Themen