Захожу в админку, далее - поля профиля. Добавляю два поля в профиль - ФИО (profile_fio), и телефон (profile_phone), общую группу называю как "Информация".
Теперь вопрос - как к ним доступ получить, имея $user->uid ?
А как отобразить поле из профиля, только если оно имеет определенное значение?
Например есть поле Пол и значения "мужской" и "женский". Как отобразить на странице всех участников мужского пола?
Сcылка выше - это встроенная возможность модуля profile.
Единственное, поле должно быть "Публичное поле. Данные будут показываться на странице профиля и на страницах списков пользователей." И необходимо указать в свойствах поля "Заголовок страницы".
<?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:
Комментарии
Зайдите на : ваш.сайт/admin/user/profile
там увидите все созданные дополнительные поля и их названия, вот эти названия и надо использовать.
Пример:
<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
Сделайте <?php print_r($user);?> и посмотрите какие там поля есть.
спасибо
А как отобразить поле из профиля, только если оно имеет определенное значение?
Например есть поле Пол и значения "мужской" и "женский". Как отобразить на странице всех участников мужского пола?
Вот так например http://www.drupal.ru/profile/profile_interests/Linux ?!
Так тоже пойдет, только я ожидал увидеть не пример реализации, а пример решения...
Сcылка выше - это встроенная возможность модуля profile.
Единственное, поле должно быть "Публичное поле. Данные будут показываться на странице профиля и на страницах списков пользователей." И необходимо указать в свойствах поля "Заголовок страницы".
Похожее, на что мне нужно нашел тут -> http://drupal.org/node/134136
а если такого поля нет в print_r($user);
если нет нужного поля, могу предложить использовать такую функцию:
<?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:
";
?>
Если хочется достать к примеру значение поля 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:
";
?>