Мини профиль как тут http://54live.ru/

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

Аватар пользователя iNFerNo iNFerNo 27 мая 2010 в 10:13

Как сделать так что бы при наведении на ник, вылезал мини профиль его как например тут http://54live.ru/ (самые активные).

П.С. Может быть и автор поделится секретом.

Комментарии

Аватар пользователя brand1@drupal.org brand1@drupal.org 27 мая 2010 в 16:05

cluetip очень удобный плагин.
rel="/user-info/586"
А если я например через cluetip вывожу views , где 586 ,будет аргументом - то подхватывается весь html из page.tpl.php, есть ли способ вывести чистую views? Есть классный модуль компонент он может вывести views как надо, но не передает аргумент.

А где находится сам шаблон для всплывающего окна, в отдельном файле? Тогда как в него через rel="/user-info/586" передаётся аргумент?

Аватар пользователя web_desg web_desg 10 июня 2010 в 12:28

"penexe" wrote:
clueTip + темизация + кусок кода

А можно поподробней, как добавить теги class и rel во все имена
пользователей? а именно чтобы было везде где написано имя пользователя, блоги, комментарии, кто на сайте...

Аватар пользователя penexe penexe 11 июня 2010 в 11:10
function theme_username($object) {

  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;
}

Аватар пользователя web_desg web_desg 11 июня 2010 в 14:51

Всё разобрался, большое спасибо за помощь, не работало из-за модуля realname
видимо этот модуль перехватил функцию username.

Аватар пользователя penexe penexe 27 апреля 2011 в 11:45

iNFerNo wrote:
"penexe" wrote:
clueTip + темизация + кусок кода

а о каком куске кода говориться?

кусок кода который отдавал кешированный html по адресу /user-info/%
этот код подом загружался в clueTip
если не забуду дам код

Аватар пользователя us11 us11 29 апреля 2011 в 14:14

в добавок к этому

"penexe" wrote:
clueTip + темизация + кусок кода

у себя использую также hoverintent, чтобы подсказка не вызывалась там где не нужно.

Сам кусок кода у меня состоит из
hook_menu в котором в 'page callback' лежит код который выводится через cluetip. А также hook_theme_registry_alter и hook_username для добавления атрибутов.

Аватар пользователя penexe penexe 2 мая 2011 в 20:26

это в hook_menu

function marafet_menu() {
  $items['user-info/%user'] = array(
    'page callback' => 'marafet_user_info_ajax',
    'page arguments' => array(1),
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  );
  return $items;
}

вот функция которая выводила раньше мини-профиль

function marafet_user_info_ajax($account) {
  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);
}

функция темы

function template_preprocess_user_info(&$variables) {
  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

function marafet_theme($existing, $type, $theme, $path) {
  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="rb">
<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>

индикатор онлайна

function theme_status_indicator($account) {
  $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;
}