Как получить поле из профиля юзера?

Главные вкладки

Аватар пользователя KCEOH KCEOH 10 октября 2007 в 0:42

Захожу в админку, далее - поля профиля. Добавляю два поля в профиль - ФИО (profile_fio), и телефон (profile_phone), общую группу называю как "Информация".
Теперь вопрос - как к ним доступ получить, имея $user->uid ?

Комментарии

Аватар пользователя Shedko Shedko 10 октября 2007 в 7:09

Зайдите на : ваш.сайт/admin/user/profile
там увидите все созданные дополнительные поля и их названия, вот эти названия и надо использовать.

Пример:

<div class="custom_profiles">
<div class="fields">City: <?php print $user->profile_city ?></div>
<div class="fields">Country: <?php print $user->profile_country ?></div>
<div class="fields">POstcode: <?php print $user->profile_postcode ?></div>
</div>

Более развернутая информация здесь: http://drupal.org/node/14466

Аватар пользователя Ne01eX Ne01eX 11 октября 2007 в 9:46

А как отобразить поле из профиля, только если оно имеет определенное значение?
Например есть поле Пол и значения "мужской" и "женский". Как отобразить на странице всех участников мужского пола?

Аватар пользователя coyotle coyotle 11 октября 2007 в 15:01

Сcылка выше - это встроенная возможность модуля profile.
Единственное, поле должно быть "Публичное поле. Данные будут показываться на странице профиля и на страницах списков пользователей." И необходимо указать в свойствах поля "Заголовок страницы".

Аватар пользователя altway altway 24 сентября 2008 в 15:48

если нет нужного поля, могу предложить использовать такую функцию:
<?php
function _profile_get_field_value($uid = NULL, $category = NULL, $name = 'fullname',$register = FALSE){
if (!empty($uid)){
$args = array();
$sql = 'SELECT fid FROM {profile_fields} WHERE ';
$filters = array();
if ($register) {
$filters[] = 'register = 1';
}
else {
if(!empty($category)){
if($debug)echo "category is $category\r\n";
// Use LOWER('%s') instead of PHP's strtolower() to avoid UTF-8 conversion issues.
$filters[] = "LOWER(category) = LOWER('%s')";
$args[] = $category;
}

$filters[] = "LOWER(name) = LOWER('%s')";
$args[] = $name;
}
if (!user_access('administer users')) {
$filters[] = 'visibility != %d';
$args[] = PROFILE_HIDDEN;
}
$sql .= implode(' AND ', $filters);

$row = mysql_fetch_assoc(db_query($sql, $args));
unset($args);unset($filters);unset($sql);
if (is_array($row)&&is_numeric($row['fid'])){
$args = array();
$sql = 'SELECT {value} FROM {profile_values} WHERE ';
$filters = array();
// Use LOWER('%s') instead of PHP's strtolower() to avoid UTF-8 conversion issues.
$filters[] = "LOWER(uid) = LOWER('%s')";
$args[] = $uid;

$filters[] = "LOWER(fid) = LOWER('%s')";
$args[] = $row['fid'];

$sql .= implode(' AND ', $filters);

$row = mysql_fetch_assoc(db_query($sql, $args));
return $row['value'];
}
}return FALSE;
}
?>

Использование:

<?php
// Select all users (but ignore blocked and never logged in ones)
$result = db_query("SELECT {users}.uid FROM {users} WHERE {users}.status <> 0 AND {users}.access <> 0");

while ($user = db_fetch_object($result)) {
// load the user objects
$user = user_load(array('uid' => $user->uid));
$accounts[] = $user;
}
foreach ($accounts as $account) {
$fullnames[$account->uid] = _profile_get_field_value($account->uid);
}
echo "\r\nfullnames:

";
      var_dump($fullnames);
    echo "

";

?>

Если хочется достать к примеру значение поля mobile из категории Личное то это будет выглядеть так:
<?php
// Select all users (but ignore blocked and never logged in ones)
$result = db_query("SELECT {users}.uid FROM {users} WHERE {users}.status <> 0 AND {users}.access <> 0");

while ($user = db_fetch_object($result)) {
// load the user objects
$user = user_load(array('uid' => $user->uid));
$accounts[] = $user;
}
foreach ($accounts as $account) {
$mobiles[$account->uid] = _profile_get_field_value($account->uid,$category = 'Личное', $name = 'mobile');
}
echo "\r\nmobiles:

";
      var_dump($mobiles);
    echo "

";
?>