Как сделать так что бы при наведении на ник, вылезал мини профиль его как например тут http://54live.ru/ (самые активные).
П.С. Может быть и автор поделится секретом.
Как сделать так что бы при наведении на ник, вылезал мини профиль его как например тут http://54live.ru/ (самые активные).
П.С. Может быть и автор поделится секретом.
Комментарии
clueTip + темизация + кусок кода
cluetip очень удобный плагин.
rel="/user-info/586"
А если я например через cluetip вывожу views , где 586 ,будет аргументом - то подхватывается весь html из page.tpl.php, есть ли способ вывести чистую views? Есть классный модуль компонент он может вывести views как надо, но не передает аргумент.
А где находится сам шаблон для всплывающего окна, в отдельном файле? Тогда как в него через
rel="/user-info/586"
передаётся аргумент?код для отдачи в своем модуле лежит
Свой модуль под это, мне кажется это лишнее. Сделать views и выводить его в popup'е от cluetip. по крайней мере я бы делал так.
Всё равно это не чистый аякс, хотя красиво Имхо, cluetip - самый клёвый tooltip плагин
А можно поподробней, как добавить теги class и rel во все имена
пользователей? а именно чтобы было везде где написано имя пользователя, блоги, комментарии, кто на сайте...
web_desg, http://api.drupal.ru/api/function/theme_username/6
if ($object->uid && $object->name) {
// Shorten the name when it is too long or it will break many tables.
if (drupal_strlen($object->name) > 20) {
$name = drupal_substr($object->name, 0, 15) .'...';
}
else {
$name = $object->name;
}
if (user_access('access user profiles')) {
// тут добавляем rel
$output = l($name, 'user/'. $object->uid, array('attributes' => array('title' => t('View user profile.'), 'rel' => 'blabla/'. $object->uid)));
}
else {
$output = check_plain($name);
}
}
else if ($object->name) {
// Sometimes modules display content composed by people who are
// not registered members of the site (e.g. mailing list or news
// aggregator modules). This clause enables modules to display
// the true author of the content.
if (!empty($object->homepage)) {
$output = l($object->name, $object->homepage, array('attributes' => array('rel' => 'nofollow')));
}
else {
$output = check_plain($object->name);
}
$output .= ' ('. t('not verified') .')';
}
else {
$output = check_plain(variable_get('anonymous', t('Anonymous')));
}
return $output;
}
Всё разобрался, большое спасибо за помощь, не работало из-за модуля realname
видимо этот модуль перехватил функцию username.
а о каком куске кода говориться?
кусок кода который отдавал кешированный html по адресу /user-info/%
этот код подом загружался в clueTip
если не забуду дам код
Грасиес.
в добавок к этому
у себя использую также hoverintent, чтобы подсказка не вызывалась там где не нужно.
Сам кусок кода у меня состоит из
hook_menu в котором в 'page callback' лежит код который выводится через cluetip. А также hook_theme_registry_alter и hook_username для добавления атрибутов.
это в hook_menu
$items['user-info/%user'] = array(
'page callback' => 'marafet_user_info_ajax',
'page arguments' => array(1),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
return $items;
}
вот функция которая выводила раньше мини-профиль
if (!$c = cache_get('user_info_'. $account->uid)) {
$profile = node_load(array('uid' => $account->uid,'type' => 'profile'));
$output .= '<div class="karma">Карма: <span class="val">'. user_karma_user_karma($account->uid) .'</span></div>';
$output .= '<div>'. $account->user_status .'</div>';
$output .= '<div class="profile">'. theme('user_picture', $account);
if ($profile) {
if ($profile->field_name[0]['value'] || $profile->field_sername[0]['value']) {
$output .= '<div>Имя: '. $profile->field_sername[0]['value'] .' '. $profile->field_name[0]['value'] .'</div>';
}
if ($profile->field_sex[0]['value']) {
$output .= '<div>Пол: '. substr($profile->field_sex[0]['value'],0,6) .'.</div>';
}
// высчитываем возраст
if ($profile->field_birthday[0]['value']) {
preg_match('/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):?(\d{2})?/i', $profile->field_birthday[0]['value'], $date);
$now = time();
$b = mktime(0, 0, 0, $date[2], $date[3], $date[1]);
$age = floor(($now - $b) / (365*24*60*60));
$output .= '<div>Возраст: '. $age .'</div>';
}
}
$output .= '</div>';
cache_set('user_info_'. $account->uid, $output, 'cache', time() + 3600);
}
else {
$output = $c->data;
}
print theme('user_info', $account, $output);
}
функция темы
global $user;
$account = $variables['account'];
$links[] = l('Профиль', 'user/'. $account->uid);
$links[] = l('Личный блог', 'user/'. $account->uid .'/blog');
if ($user->uid && $user->uid != $account->uid) {
$links[] = l('Написать', 'messages/new/'. $account->uid);
}
$variables['links'] = theme('item_list', $links);
}
hook_theme
return array(
'user_info' => array(
'arguments' => array('account' => NULL, 'data' => NULL),
'template' => 'user-info'
),
'status_indicator' => array(
'arguments' => array('account' => NULL),
),
);
}
шаблон user-info.tpl.php
<div class="t"><div class="angles l"/><div class="angles r"/></div>
<div class="content">
<span class="name"><?php print $account->name . theme('status_indicator', $account) ?></span>
<?php print $data;?>
<?php print $links;?>
</div>
<div class="b"><div class="angles l"/><div class="angles r"/></div>
</div>
индикатор онлайна
$time_period = 300; // 5 минут
$result = db_result(db_query("SELECT uid, name, access FROM {users}
WHERE access >= %d AND uid = %d", time() - $time_period, $account->uid));
$indicator = ($result) ? '<img class="istat" src="'. url('themes/custom/images/online.png') .'"/>' : '<img class="istat" src="'. url('themes/custom/images/offline.png') .'"/>';
return $indicator;
}