מי שניסה, יודע שזה מאוד מעצבן לעבוד עם המודול של דרופל - profile. מודול זה מאפשר להחזיק מידע משלים על המשתמשים (שם פרטי, שם משפחה, מספר ילדים, תחביבים, תאריך לידה....), עפ"י שדות מסוגים שונים שאנחנו מגדירים.
בעת עריכת פרטי משתמש מוצגים לנו שדות אלו בטאב משני בעמוד. כלומר - בכניסה לעריכת פרטי משתמש, מוצגים לנו קודם כל פרטי המשתמש ה"דרופליים": שם משתמש, אימייל, עיצוב נבחר, שפת ממשק וכד'. בכדי לערוך את שדות הפרופיל, עלינו ללחוץ על קישור שמעביר אותנו למסך נוסף, ובו רק שדות הפרופיל.
פעמים רבות עולה הבקשה להציג דוקא את פרטי הפרופיל, ובנוסף אליהם, באותו מסך, לאפשר למשתמשים לשנות פרטים "דרופליים" כמו שם המשתמש והסיסמה.
ושוב - מי שניסה לעשות את זה - יודע שזה מעצבן. במקרים רבים הפתרון הוא פשוט להשתמש במודול אחר - nodeprofile, שמייצר node עבור כל משתמש, ומאפשר לנו להגדיר שדות בפשטות, דרך CCK, עם כל המשתמע מכך.
מי שבכל זאת משתמש ב-profile הישן (והטוב?), בד"כ משום שאין לו דרישות גבוהות מפרטי המשתמש, יוכל להשתמש בטריק הבא על מנת לאחד את שני הטפסים:
<?php
function mymodule_form_alter($form_id,&$form) {
switch ($form_id) {
case "user_edit":
// 1
if ($form['_category']['#value'] == 'Personal information') {
// 2
$account_form = user_edit('account');
// 3
$form['account'] = $account_form['account'];
}
break;
}
}
?>
הסברים:
1. ראשית עלינו לוודא שאנחנו בטופס העריכה של הקטגוריה המתאימה. קטגוריה זו נקבעת בעת יצירת השדות בפרופיל
2. זהו ליבו של הטריק - אנחנו יוצרים משתנה חדש, $account_form, שמחזיק העתק של טופס עריכת פרטי המשתמש, ה"דרופלי".
3. אנחנו מוסיפים לטופס הנוכחי את השדות הרצויים מתוך הטופס המועתק.
שימו לב שהכל מתבצע בתוך hook_form_alter של מודול שכתבנו במיוחד לשם כך.
זהו :-)