Создаем стену пользователя

1. При создании сайта – коллективного блога, аналогичного хабру, важная роль будет отведена правильной организации системы рейтинга пользователей. Из всех ныне существующих модулей для CMS Drupal, реализующих данный функционал, на мой взгляд, для создании полноценной системы рейтинга пользователей, наиболее подходит модуль Userpoints.

Для того чтобы добавить информацию о рейтинге (количество очков) пользователя на его персональную страницу на сайте (страницу аккаунта), необходимо в файл user-profile.tpl.php (необходимо этот файл добавить в папку темы оформления Вашего сайта) вставить следующий код:

<?php print userpoints_get_current_points($account->uid); ?>

2. Очень важно указывать статус пользователя в сети на данный момент. Это очень важный момент особенно для сайтов с системой внутренних личных сообщений.

Для того, чтобы вывести информацию о том, в онлайне пользователь или нет, необходимо в файл user-profile.tpl.php (необходимо этот файл добавить в папку темы оформления Вашего сайта) вставить следующий код:

<?php
  $time_period
= variable_get('user_block_seconds_online', 2700);
 
$uid = $account->uid;
  if (
$account->access > time() - $time_period) {
    echo
'В сети';
  }
  else {
    echo
'Оффлайн';
  }
?>

3. Помимо отображения самой разнообразной информации в профиле пользователя на сайте, нередко становится нужным ограничить доступ к части информации в профиле. Например, для админов сайтов нужно чтобы в профиле каждого пользователя выводилась специальная информация о нем (статистика). Или нужно ограничить доступ к части информации в профиле для пользователей определенных ролей. 

Все это делается с помощью следующего кода, который необходимо вставить в файл user-profile.tpl.php (необходимо этот файл добавить в папку темы оформления Вашего сайта):

<?php if (user_access('administer users')): ?>
<div class="fields">Информация только для админов</div>
<?php endif; ?>
<?php if (in_array('blog_author',$user->roles)): ?>
Вывод ссылки на блог пользователя при условии если он относиться к роли blog_author
<div class="fields"><a href="/blog/<? print $user->uid; ?>">Read <?php print $user->name ?>'s Blog</div>
<?php endif; ?>

4. Многих очень удручает вид стандартного профиля пользователя на сайте на основе CMS Drupal. Часть профиля, которая очень часто подвергается удалению – это раздел «История». Тем не менее, информация о дате регистрации пользователя и о том сколько времени прошло с того момента, является важной и довольно интересной информацией.

Но эту информацию можно добавить на страницу пользователя и иным способом. Для этого необходимо в файл user-profile.tpl.php (необходимо этот файл добавить в папку темы оформления Вашего сайта) вставить следующий код:

Дата регистрации:

<?php print (format_date($account->created, 'small'));?>

Регистрация (сколько времени назад):

 <?php print (format_date($account ->created, 'medium'));?> (<?php print (format_interval(time() - $ account ->created));?>)

5. При создании любой социальной сети очень важным является профайл пользователя, его контактные и личные данные, которые могут помочь установить более тесные связи между отдельными пользователями сети. Это касается как сообщества геймеров, так и сайта знакомств. Для того,чтобы создать и добавить в профайл пользователей поле "Возраст", нам понадобятся 4 модуля:

Все эти модули необходимо скачать и установить (а именно надо активировать модули Content, Date, Date API, Date Timezone, Computed field, Content Profile).

После установки соответствующих модулей необходимо настроить модуль Date через административный интерфейс Вашего сайта (Administer -> Site configuration -> Date & Time) в разделе "Date & Time". В этом разделе Вам необходимо выбрать временную зону, которая будет установлена по умолчанию на сайте, возможность или нет пользователям самим выбирать себе временные зоны, и установка первого дня недели (для пояснения - по умолчанию на сайте первым днем недели установлено по американской традиции Воскресенье, для нас нужно выбрать Понедельник - Monday).

После настройки модуля "Date", необходимо создать поле "День рождение". Для этого переходим в тот тип материалов, который установлен как "Content profile" пользователей Вашего сайта. В разделе "Manage Fields" данного типа материала создаем новое поле.

И при создании нового поля вводим следующую информацию:

  • Label: День рождения
  • Field: dob
  • Select Field Type: Date
  • Widget: Select List

И сохраняем поле. В появившемся новом окне с более подробными настройками нового поля добавляем следующую информацию:

  • Default Value: на Ваше усмотрение.
  • Default Value from to Date: на Ваше усмотрение.
  • Custom Input Format: 'F j, Y'
  • Years back and forward: -100:+10
  • Time increment: 1
  • Customize Date Parts: Blank
  • Required: Checked off
  • Number of values: 1
  • To Date: Never
  • Granularity: Year, Month, and Day
  • Default Display: Medium
  • Time zone handling: Site's time zone

Вновь сохраняем поле. Таким образом было создано поле "День рождения", которое должен будет заполнить пользователь при создании своего профайла на сайте.

Далее в этом же типе материалов, определенном как "Content Profile" пользователей Вашего сайта в разделе "Manage Fields" создаем новое поле "Возраст". В соответствующих полях необходимо ввести следующую информацию:

  • Label: Возраст
  • Field: age
  • Type of Data to Store: Computed
  • Form element to edit the data: Computed
  • Сохранить поле. В новом окне введем более полную информацию о настройках поля:
  • Label: Возраст
  • Widget Type: Computed
  • Help text: Blank
  • Default Value PHP Code: Blank
  • Required: not checked off
  • Number of values: 1

В поле Computed Code введем следующий код:
 

if (!$node->nid) node_save($node);
$dob = $node->field_dob[0]['value'];
$now = time();
$then = strtotime($dob);
$diff = date('Y', $now) - date('Y', $then);
if($diff < 0) /* ideally you want to prevent this from happening */
echo '??? - negative age.';
if(($diff > 0) && (date('z',$now) < date('z',$then)))
$diff --;
$node_field[0]['value'] = $diff;
  • Display this field: checked off.
  • Display Format:
     
$display = $node_field_item['value'];
  • Store using database settings below: checked off
  • Data type: int
  • Data length: 3
  • Default value: blank
  • Not NULL: checked off
  • Sortable: checked off

И сохраним введенные данные. Вот собственно и все. Если Вы сделали все правильно, теперь пользователи при заполнении своего профайла будут вводить данные о дне рождения. А сайт сам автоматически будет определять их возраст и выводить данные в их профайл.

6. Важных антуражем социальной сети в последнее время стала так называемая стена в профайле пользователя. Это, по сути, место, где любой желающий может оставить комментарий профайлу пользователя. На данный момент лучшим модулем для настройки профайла пользователей является модуль Content Profile (http://drupal.org/project/content_profile). Он позволяет настроить отображение профайла пользователей практически на 100% так, ка Вы пожелаете. Поэтому мы рекомендуем использовать именно этот модуль при создании любой социальной сети на основе CMS Drupal (речь идет о 6 версии Drupal).

Но и самые популярные модули имеют свои недостатки. С помощью Content Profile в той версии, которая есть на данный момент, мы не можем отображать в профайле пользователя комментарии и форму ввода комментариев к тому типу материалов, который определен на сайте как "Conetnt Profile" пользователей. То есть мы не сможем сделать полноценную стену пользователя.

Но и здесь сообщество Drupal нашло выход. Чтобы обойти ограничение модуля надо выполнить следующую последовательность действий.

Перейдите в тот тип материалов, который определен как "Conetnt Profile" пользователей. Перейдите в раздел "Conetnt Profile". Выберите пункт в настройке "Don't display this content profile on the user account page from admin options" и сохраните данные.

Далее в папке темы Вашего сайта выберите файл, который отвечает за отображение профайла пользователей - user-profile.tpl.php и добавьте (добавьте дополнительно или замените полностью имеющийся там код) в него следующий код:

 

<?php
  $node
= NULL;
 
$node_profile = $content_profile->get_variables('profile');
  if(
$node_profile)
   
$node = &$node_profile['node'];
 
// [ ... ]
  // This is the ready-for-print variable for the user profile data
 
print $user_profile;
 
// [ ... ]
  // Print this wherever you want to show the node_profile content
 
print node_view($node, FALSE/*teaser*/, TRUE, TRUE);
 
// [ ... ]
  // Put this where you want to show your comment block
 
if ($node && function_exists('comment_render')){
    if(
$node->comment)
    {
      print
comment_render($node);
    }
  }
?>

Ну вот и все.Теперь комментарии отображаются и у нас есть на странице профайла пользователя полноценная "стена". Не забудьте очистить кеш сайта через раздел "Производительность" для того, чтобы увидеть произведенные изменения.

В заключении можем посоветовать еще ряд модулей, чтобы сделать стену пользователя одной из лучших фишек Вашего сайта. Это прежде всего модуль Ajax Comments (http://drupal.org/project/ajax_comments), позволяющий добавлять комментарии без перезагрузки страницы с помощью технологии Ajax, и модуль Usercomment (http://drupal.org/project/usercomment), который позволит дать пользователям право удалять комментарии на их собственной стене (это особенно важно при борьбе со спамом и просто неадекватными людьми).