Ek Kullanıcı Profili Alanlarına Erişim


9

Kullanıcı profillerine bir düzine kadar yeni alan (Drupal 7'de) ekledim:

Yapılandırma -> Kişiler -> Hesap Ayarları -> Alanları Yönet (admin / config / people / accounts / fields)

Bu değerlere nasıl erişebilirim? $ Kullanıcının bir parçası gibi görünmüyor

Başarısız denendi:

global $user;
var_dump($user);

Yanıtlar:


13

Sanırım buldum. Görünüşe göre ek bir adım daha var.

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

Artık özel kullanıcı alanlarıma $ user_full aracılığıyla erişebiliyorum


1

Paneller bunu ilişkilerle oldukça ağrısız bir şekilde yapabilir.


0

Cevabımı /programming/8124089/get-value-of-custom-user-field-in-drupal-7-template adresinden yeniden gönderiyorum çünkü bunun alternatif bir çözüm olduğunu düşünüyorum. Bu örnek, varsayılan kullanıcı adı yerine field_real_name gibi bir şeyin nasıl kullanılacağını gösterir.

Bir önişleme işlevi kullanıyorsanız, genel $usernesneyi çekmeye gerek yoktur . $ Değişkenler dizisindeki $variables['name']alanı, özel alanınızda aradığım alanla değiştirebilirsiniz field_real_name. $variablesDiziye erişiminiz var , böylece kullanıcı bilgilerini bununla alabilirsiniz - uid ile ilişkili bilgileri yükleyecektir ( bkz. Template_preprocess_username ):

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

Siz dpm($account)(veya kpr($account)devel kullanmıyorsanız), global $usernesneyi kullanmadan tüm kullanıcı bilgilerine erişiminiz olduğunu görürsünüz .

Sonra çıktısını değiştirebilir $variables['name']senin olmaya field_real_nameolarak aşağıdaki gibidir:

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

Tuhaf bir nedenden dolayı, Drupal 7'deki profil alanları eskisi gibi değil. Ancak, kullanıcı profili nesnesi, ek profil alanlarına dizi öğeleri olarak erişilmesini sağlar. Örneğin:

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

kullanılabilir değil ancak şu şekilde yeniden yazıldığında çalışır:

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

Bu yüzden sadece kodumda aşağıdakileri yaptım:

/*
 * 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'];

$userNesneyi tekrar çağırmak yerine işleri çalıştırmanın başka bir yolu .


0

Drupal 7 çekirdeği ile kullanıcı verilerini (özel alanlar dahil) yükleyebilirsiniz

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

Drupal 7> API> Varlık yükü hakkında daha fazla bilgi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.