it-swarm.asia

الوصول إلى حقول ملف تعريف المستخدم الإضافية

أضفت عشرات أو أكثر من الحقول الجديدة (في Drupal 7) إلى ملفات تعريف المستخدمين باستخدام:

التكوين -> الأشخاص -> إعدادات الحساب -> إدارة الحقول (المشرف/التكوين/الأشخاص/الحسابات/الحقول)

كيف يمكنني الوصول إلى هذه القيم؟ لا يبدو أنهم جزء من $ user

حاول دون نجاح:

global $user;
var_dump($user);
9
Citricguy

أعتقد أنني وجدتها. يبدو أن هناك خطوة إضافية واحدة.

global $user;
$user_full = user_load($user->uid); // user_load(uid) returns the complete array
var_dump($user_full);

يمكنني الآن الوصول إلى حقول ملفي الشخصي المخصص من خلال $ user_full

13
Citricguy

يمكن للألواح أيضًا القيام بذلك بدون ألم مع العلاقات.

1
Matt

يمكنك تحميل بيانات المستخدم (الحقول المخصصة مضمنة) مع Drupal 7 core

$user = entity_load($entity_type = "user", $ids = Array($user->uid), $conditions = array(), $reset = FALSE);

مزيد من التفاصيل على Drupal 7> API> تحميل الكيان

0
augusto

أنا أعيد نشر إجابتي من https://stackoverflow.com/questions/8124089/get-value-of-custom-user-field-in-drupal-7-template هنا لأنني أعتقد أن هذا هو حل بديل. يوضح هذا المثال كيفية استخدام شيء مثل field_real_name بدلاً من اسم المستخدم الافتراضي.

إذا كنت تستخدم وظيفة ما قبل المعالجة ، فلا حاجة لسحب الكائن العام $user. يمكنك تغيير الحقل في صفيف متغيرات $ وهو $variables['name'] إلى ما لديك في الحقل المخصص الذي اتصلت به field_real_name. لديك حق الوصول إلى الصفيف $variables ، حتى تتمكن من الحصول على معلومات المستخدم بهذا - سيتم تحميل المعلومات المرتبطة بمعرف المستخدم ( انظر template_preprocess_username ):

function mythemename_preprocess_username(&$variables) {
    $account = user_load($variables['account']->uid);
    ...more code will go here in a moment
}

إذا كنت dpm($account) (أو kpr($account) إذا كنت لا تستخدم devel) ، سترى أنه يمكنك الوصول إلى جميع معلومات المستخدم ، دون استخدام $user العالمي موضوع.

ثم يمكنك تغيير ناتج $variables['name'] ليصبح field_real_name على النحو التالي:

function mythemename_preprocess_username(&$variables) {

  // Load user information with user fields
  $account = user_load($variables['account']->uid);

  // See if user has real_name set, if so use that as the name instead
  $real_name = $account->field_real_name[LANGUAGE_NONE][0]['safe_value'];
  if (isset($real_name)) {
    $variables['name'] = $real_name;
  }
}
0
kbrinner

لسبب غريب ، فإن حقول الملف الشخصي في Drupal 7 ليست كما كانت من قبل. ومع ذلك ، فإن كائن ملف تعريف المستخدم يجعل الوصول إلى حقول الملف الشخصي الإضافية كعناصر صفيف. على سبيل المثال:

$profile->field_fieldname['und'][0]['value']

غير متاح ولكنه سيعمل عند إعادة كتابته على النحو التالي:

$user_profile['field_fieldname']['#object']->field_fieldname['und'][0]['value'];

لذلك قمت ببساطة بما يلي في الكود الخاص بي:

/*
 * Create simplified variables as shortcuts for all fields.
 * Use these variables for read access lateron.
 */
$firstname = $user_profile['field_first_name']['#object']
  ->field_first_name['und'][0]['value'];

$middlename = $user_profile['field_middle_name']['#object']
  ->field_middle_name['und'][0]['value'];

$surname = $user_profile['field_surname']['#object']
  ->field_surname['und'][0]['value'];

$image = $user_profile['field_user_picture']['#object']
  ->field_user_picture['und'][0]['uri'];

مجرد طريقة أخرى لتشغيل الأشياء ، بدلاً من استدعاء $user الكائن مرة أخرى.

0
abdulqadir028