Создание социальной сети на Drupal

Подписаться

Рассмотрим из каких модулей и с помощью каких приемов мы можем сделать социальную сеть на друпале. Некоторые вещи потребуют создания своего модуля, поэтому сразу скачайте заготовку mymodule.zip куда будете писать код.

Содержание статьи


Список используемых модулей


Профиль

Самый лучший модуль для профиля по моему мнению это - Content Profile.
Вместе с дополнительными модулями для CCK вы сможете создать профиль любого вида.


Cоздание профиля

После установки Content Profile появится новый тип нод profile, его и будем использовать.
В настройках типа: оставляем пустым поле Body field label, чтобы скрыть стандартное поле body; ставим галочку Use this content type as a content profile for users. Не забудьте установить права доступа к create profile content и edit own profile content для зарегистрированных пользователей.
Теперь добавим поля:

  • Имя
    Label: Имя
    Field name: field_profile_name
    Type: Text
    Form element: Text field
  • Фамилия
    Label: Фамилия
    Field name: field_profile_surname
    Type: Text
    Form element: Text field
  • Пол
    Label: Пол
    Field name: field_profile_sex
    Type: Text
    Form element: Select list
    Allowed values list: мужской
    женский
  • Дата рождения
    Label: Дата рождения
    Field name: field_profile_birthday
    Type: Date (модуль Date)
    Form element: Text Field with Date Pop-up calendar (модуль Date Popup, включен в Date)
    Input format: 29/09/2011
    Years back and forward: -70:0
    Granularity: Year, Month, Day
    Time zone handling: No time zone conversion
  • Местоположение
    1. Создайте новый словарь таксономии Местоположение
    2. Импортируйте базу городов в словарь как написано здесь или используйте модуль Taxonomy CSV import/export, файл для импорта, тип файла Hierarchical tree structure.
    3. Создайте cck поле:
      Label: Местоположение
      Field name: field_profile_location
      Type: Content Taxonomy Fields (модуль Content Taxonomy)
      Form element: Hierarchical Select (модуль Hierarchical Select Content Taxonomy)
      Vocabulary: Местоположение
      Save values additionally to the core taxonomy system (into the 'term_node' table).: поставить галочку
    4. Далее в настройках HS по адресу admin/content/node-type/profile/fields/field_profile_location/hs_config:
      Resizable: Enabled
  • Телефон
    Label: Телефон
    Field name: field_profile_phone
    Type: Text
    Form element: Text field
  • Сайт
    Label: Сайт
    Field name: field_profile_site
    Type: Link (модуль Link)
    Form element: Link
    Link Title: No Title
    Link Target: Open link in new window
    Rel Attribute: nofollow
  • О себе
    Label: О себе
    Field name: field_profile_about
    Type: Text
    Form element: Text area (multiple rows)
  • Интересы
    Label: Интересы
    Field name: field_profile_interests
    Type: Text
    Form element: Text area (multiple rows)
    Rows: 2
  • Фотография
    Label: Фотография
    Field name: field_profile_photo
    Type: File (модуль Filefield)
    Form element: Image with cropping (модуль Image crop)
    The resolution to crop the image onto: 200x300
    Minimum resolution for Images: 200x300
    File path: profile_photos

После создания полей, добавьте 4 группы:

  • Основное
    Label: Основное
    Group name: group_main
    Style: Tabs
    Поля: Имя, Фамилия, Пол, Дата рождения, Местоположение
  • Интересы
    Label: Интересы
    Group name: group_interests
    Style: Tabs
    Поля: Интересы, О себе
  • Контакты
    Label: Контакты
    Group name: group_contact
    Style: Tabs
    Поля: Телефон, Сайт
  • Фотография
    Label: Фотография
    Group name: group_photo
    Style: Tabs
    Поля: Фотография

Примерно то, что должно получиться:

Неиспользуемое поле title мы скрываем и при сохранении будем менять значение на имя пользователя используя код в модуле:

function mymodule_form_alter(&$form, $form_state, $form_id) {
  if ('profile_node_form' == $form_id) {
    $form['title']['#type'] = 'value';
    $form['title']['#required'] = FALSE;
  }
}

function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  if ($node->type == 'profile' && $op == 'presave') {
    $node->title = $node->name;
  }
}


Темизация профиля

Темизировать будем в 2 этапа:

  1. Перекрытие стандартного шаблона пользователя.
    В mymodule.module пишем код:
    // перекрываем callback функцию
    function mymodule_menu_alter(&$items) {
      $items['user/%user_uid_optional']['page callback'] = 'mymodule_user_view';
    }
    // в отличии от стандартной, здесь нет загрузки стандартного профиля
    function mymodule_user_view($account) {
      drupal_set_title(check_plain($account->name));
      return theme('user_profile', $account);
    }
    // убераем стандартные preprocess функции профиля
    function mymodule_theme_registry_alter(&$theme_registry) {
      $theme_registry['user_profile']['preprocess functions'] = array('mymodule_preprocess_user_profile');
    }

    Первые 2 функции влияют на работоспособность других модулей, если вы не уверены в их целесообразности можете их удалить.
  2. Теперь займемся темизацией. В mymodule.module добавляем preproсess функцию:
    function mymodule_preprocess_user_profile(&$variables) {
      global $user;

      $account = $variables['account'];
      // загружаем профиль пользователя из content_profile
      $profile = content_profile_load('profile', $account->uid);
      $profile = node_build_content($profile);
      $variables['profile'] = $profile;
      // создаем переменные для простых полей
      $variables['profile_name'] = $profile->field_profile_name[0]['safe'];
      $variables['profile_surname'] = $profile->field_profile_surname[0]['safe'];
      $variables['profile_sex'] = $profile->field_profile_sex[0]['safe'];
      // день рождения
      if ($profile->field_profile_birthday[0]['value']) {
        $date = date_convert($profile->field_profile_birthday[0]['value'], 'datetime', 'datestamp');
        $variables['profile_birthday'] = format_date($date, 'custom', 'j F Y');
      }

      $variables['profile_phone'] = $profile->field_profile_phone[0]['safe'];
      // ссылка на сайт
      if ($profile->field_profile_site[0]['url']) {
        $variables['profile_site'] = l($profile->field_profile_site[0]['display_title'], $profile->field_profile_site[0]['display_url'], array('attributes' => $profile->field_profile_site[0]['attributes']));
      }

      $variables['profile_about'] = $profile->field_profile_about[0]['safe'];
      $variables['profile_interests'] = $profile->field_profile_interests[0]['safe'];
      // местоположение
      if ($profile->field_profile_location[0]['value']) {
        $parents = taxonomy_get_parents_all($profile->field_profile_location[0]['value']);
        foreach (array_reverse($parents) as $parent) {
          $location[] = l($parent->name, taxonomy_term_path($parent));
        }
        if (!empty($location)) $loc = implode(', ', $location);
        $variables['profile_location'] = $loc;
      }
      // переменная для отображаемого имени пользователя
      if ($variables['profile_name'] && $variables['profile_surname']) {
        $variables['display_name'] = $variables['profile_name'] .' '. $variables['profile_surname'];
      }
      elseif ($variables['profile_name']) {
        $variables['display_name'] = $variables['profile_name'];
      }
      else {
        $variables['display_name'] = $account->name;
      }
      // меняем заголовок страницы
      drupal_set_title($variables['display_name']);

      if ($profile->field_profile_photo[0]['filepath']) {
        $variables['profile_photo'] = theme('image', $profile->field_profile_photo[0]['filepath']);
      }
      else {
        // если пользователь не загрузил фотографию, покажем стандартную
        $variables['profile_photo'] = theme('image', 'sites/default/files/profile_photos/default.png');
      }
      // переменная для региона профиля
      $variables['profile_region'] = theme('blocks', 'profile_region');

      $user_actions = array();

      if ($user->uid == $account->uid) {
        // Редактировать страницу
        $user_actions[] = l('Редактировать страницу', "user/$account->uid/profile/profile", array('query' => drupal_get_destination()));
       
        // Редактировать страницу
        if ($profile->field_profile_photo[0]['filepath']) {
          $user_actions[] = l('Изменить фотографию', "user/$account->uid/profile/profile", array('query' => drupal_get_destination(), 'fragment' => 'tabset-tab-5'));
        }
        else {
          $user_actions[] = l('Загрузить фотографию', "user/$account->uid/profile/profile", array('query' => drupal_get_destination(), 'fragment' => 'tabset-tab-5'));
        }
      }
     
      //в этот массив позже добавим ссылки: Отправить сообщение, добавить в друзья и тд.
      if (!empty($user_actions)) {
        $variables['user_actions'] = theme('item_list', $user_actions);
      }
    }

    Скопируйте в папку sites/default/files/profile_photos картинку default.png для показа на месте фотографии если пользователь её не загрузил.
    В профиле мы будем выводить регион под фотографией для блоков, таких как: друзья, видео, фото, заметки.
    В prepocess функцию мы уже добавили соответствующий код, теперь в файле темы *.info нужно добавить регион. Так как я использую garland мне пришлось вдобавок прописать там и стандартные регионы:
    regions[profile_region] = Profile Region
    regions[left] = Left sidebar
    regions[right] = Right sidebar
    regions[content] = Content
    regions[header] = Header
    regions[footer] = Footer

    Создайте файл user-profile.tpl.php в папке с вашей темой и поместите туда код:
    <div class="profile">
      <div class="profile-left"><?php print $profile_photo; ?><?php print $user_actions; ?><?php print $profile_region; ?></div>
      <div class="profile-right">
        <?php if ($profile_sex || $profile_birthday || $profile_location): ?>
        <div class="profile-group">
          <div class="profile-group-label"><?php print $variables['display_name']; ?><?php if (node_access('update', $profile)) print l('Редактировать', "user/$account->uid/profile/profile", array('fragment' => 'tabset-tab-2')); ?></div>
          <div class="profile-group-content">
            <table>
              <?php if ($profile_sex): ?><tr><td class="field-label">Пол</td><td><?php print $profile_sex; ?></td></tr><?php endif; ?>
              <?php if ($profile_birthday): ?><tr><td class="field-label">День рождения</td><td><?php print $profile_birthday; ?></td></tr><?php endif; ?>
              <?php if ($profile_location): ?><td class="field-label">Местоположение</td><td><?php print $profile_location; ?></td></tr><?php endif; ?>
            </table>
          </div>
        </div>
        <?php endif; ?>

        <?php if ($profile_phone || $profile_site): ?>
        <div class="profile-group">
          <div class="profile-group-label">Контактные данные<?php if (node_access('update', $profile)) print l('Редактировать', "user/$account->uid/profile/profile", array('fragment' => 'tabset-tab-4')); ?></div>
          <div class="profile-group-content">
            <table>
              <?php if ($profile_phone): ?><tr><td class="field-label">Телефон</td><td><?php print $profile_phone; ?></td></tr><?php endif; ?>
              <?php if ($profile_site): ?><td class="field-label">Сайт</td><td><?php print $profile_site; ?></td></tr><?php endif; ?>
            </table>
          </div>
        </div>
        <?php endif; ?>

        <?php if ($profile_about || $profile_interests): ?>
        <div class="profile-group">
          <div class="profile-group-label">Личная информация<?php if (node_access('update', $profile)) print l('Редактировать', "user/$account->uid/profile/profile", array('fragment' => 'tabset-tab-3')); ?></div>
          <div class="profile-group-content">
            <table>
              <?php if ($profile_interests): ?><tr><td class="field-label">Интересы</td><td><?php print $profile_interests; ?></td></tr><?php endif; ?>
              <?php if ($profile_about): ?><td class="field-label">О себе</td><td><?php print $profile_about; ?></td></tr><?php endif; ?>
            </table>
          </div>
        </div>
        <?php endif; ?>
      </div>
    </div>

    Добавим немного css в нашу тему:
    .profile-group-label {
      font-weight:bold;
      font-size:14px;
      font-family: Arial;
    }
    .profile-group-label a {
      font-size:12px;
      float:right;
      font-size: 10px;
    }
    .profile-group .field-label {
      width:200px;
      color:#777777;
    }
    .profile-left {
      float:left;
      width:200px;
    }
    .profile-right {
      margin-left:220px;
      overflow: hidden;
    }

Вот так должен выглядеть профиль после темизации.


Замена логина пользователя на Имя Фамилия

Для этого понадобиться модуль Realname. Установите его. Затем на странице admin/user/realname/module выбирете Content Profile.
После на старнице admin/user/realname/fields выделите поля Имя и Фамилия, Name Pattern: %1 %2. Желательно сделать поле Фамилия обязательным для заполнение, чтобы не было конфликтов.

Вывод профиля пользователя на главной странице, а для анонимного пользователя показ формы логина

  1. Добавте такой код в mymodule.module:
    /**
     * Implementation of hook_menu().
     */

    function mymodule_menu() {
      $items = array();

      $items['mymodule_frontpage'] = array(
        'page callback' => 'mymodule_page',
        'access callback' => TRUE,
        'type' => MENU_CALLBACK,
      );

      return $items;
    }

    function mymodule_page() {
      global $user;
      module_load_include('inc', 'user', 'user.pages');

      if ($user && user_access('user_view_access')) {
        drupal_set_title(user_page_title($user));
        return user_view($user);
      }
      else {
        //Если хотите сделать как вконтакте, то пишите ниже return 'тектст приветствия.';
        //Затем поместите блок логина в левый регион и сделайте её видимой только анонимам.
        return drupal_get_form('user_login');
      }
    }
    // эта функция нужна для замены ссылок на главную страницу
    function custom_url_rewrite_outbound(&$path, &$options, $original_path) {
      global $user;

      if ($user) {
        if ($path == '' || $path == 'mymodule_frontpage') {
          $path = 'user/' . $user->uid;
        }
      }
    }
    // редирект пользователя с ноды профиля на сам профиль пользователя
    function mymodule_init() {
      if ($node = menu_get_object()) {
        if ($node->type == 'profile') {
          drupal_goto('user/'. $node->uid);
        }
      }
    }
  2. В настройках admin/settings/site-information за главную страницу установить mymodule_frontpage.


Друзья

User Relationships - модуль хорошо интегрирован с views и позволит создавать различные списки друзей.
Включим модули UR-API, UR-UI, UR-Views. Установим права доступа для зарегистрированных пользователей: can have relationships, maintain own relationships.
На странице admin/user/relationships/add создадим тип отношений для друзей Name: Friend.
На странице admin/user/relationships/settings уберем галочку Allow multiple relationships
Друзей мы будем показывать в списках с маленькими аватарами, поэтому создадим 2 imagecache правила:

  • photo-50x50
    Preset Namespace: photo-50x50
    Action: Scale And Crop 50x50
  • photo-100x100
    Preset Namespace: photo-100x100
    Action: Scale And Crop 100x100

После настройки модуля создадим представление для списков друзей.

Настройка views

  1. Создаем новое представление View name: friends, View type: User relationship.
  2. Добавляем отображение типа page.
    • Basic settings:
      • Name: Друзья
      • Title: Друзья
      • Use pager: Yes
      • Items to display: 25
    • Page settings:
      • Path: friends
    • Relationships:
      • Добавляем отношение User relationships: Requestee user
      • Добавляем отношение User relationships: Requester user
      • Добавляем отношение Node: Content Profile и настраиваем его:
        • Relationship: requestee
        • Content type: profile
    • Arguments:
      • Добавляем аргумент User relationships: Requester user и настраиваем его:
        • Validator options:
          • Validator: User
          • Type of user argument to allow:: Only allow numeric UIDs
        • Action to take if argument is not present: Provide default argument
          • Default argument type: User ID from logged in user
    • Filters:
      • Добавляем фильтр User: Active и настраиваем его:
        • Relationship: requestee
        • Active: Yes
      • Добавляем фильтр User relationships: Relationship status и настраиваем его:
        • Status: Approved
      • Добавляем фильтр User relationships: Relationship type и настраиваем его:
        • Relationship types: Friend
    • Fields:
      • Добавляем поле Content: Фотография (field_profile_photo) и настраиваем его:
        • Relationship: Content Profile
        • Label: None
        • Format: photo-100x100 image
      • Добавляем поле Content: Имя (field_profile_name) и настраиваем его:
        • Relationship: Content Profile
        • HTML element: - None -
        • Wrapper HTML element: - None -
        • Label: None
        • Format: Default
      • Добавляем поле Content: Фамилия (field_profile_surname) и настраиваем его:
        • Relationship: Content Profile
        • HTML element: - None -
        • Wrapper HTML element: - None -
        • Label: None
        • Format: Default
      • Добавляем поле User: Name и настраиваем его:
        • Relationship: requestee
        • Label: пустое поле
  3. Добавляем отображение типа page.
    • Basic settings:
      • Name: Друзья
    • Page settings:
      • Path: friends/list
      • Menu:
        • Type: Default menu tab
        • Title: Все друзья
        • Weight: 1
        • Parent menu item: Already exists
  4. Добавляем отображение типа block.
    • Basic settings:
      • Name: Друзья (блок)
      • Style:
        Жмем кнопку Override,

  • Style: Grid
  • Number of columns: 3
  • Use pager:
    Жмем кнопку Override, No
  • Items to display: 6
  • Arguments:
    • Изменяем аргумент User relationships: Requester user:
      Жмем кнопку Override
      • Action to take if argument is not present: Provide default argument
        • Default argument type: User ID from URL
  • Fields:
    • Изменим поле Content: Фотография (field_profile_photo):
      Жмем кнопку Override,
      • Format: photo-50x50 image
  • Sort criteria:
    Жмем кнопку Override,
    • Добавляем сортировку Global: Random
  • Добавляем отображение типа page.
    • Basic settings:
      • Name: Друзья онлайн
    • Page settings:
      • Path: friends/online
      • Menu:
        • Type: Menu tab
        • Title: Друзья онлайн
        • Weight: 2
        • Parent menu item: Already exists
    • Filters:
      Жмем кнопку Override,
      • Добавляем еще один фильтр User: Last access и настраиваем его:
        • Relationship: Content Profile
        • Operator: Is greater than or equal to
        • Value type: An offset from the current time such as....
          • Value: -5 minutes
  • Добавляем отображение типа block.
    • Basic settings:
      • Name: Друзья онлайн (блок)
      • Title:
        Жмем кнопку Override, Друзья онлайн
      • Style:
        Жмем кнопку Override,
        • Style: Grid
        • Number of columns: 3
      • Use pager:
        Жмем кнопку Override, No
      • Items to display: 6
    • Arguments:
      • Изменяем аргумент User relationships: Requester user:
        Жмем кнопку Override
        • Action to take if argument is not present: Provide default argument
          • Default argument type: User ID from URL
    • Fields:
      • Изменим поле Content: Фотография (field_profile_photo):
        Жмем кнопку Override,
        • Format: photo-50x50 image
    • Sort criteria:
      Жмем кнопку Override,
      • Добавляем сортировку Global: Random
  • Добавляем отображение типа page.
    • Basic settings:
      • Name: Заявки
    • Page settings:
      • Path: friends/request
      • Menu:
        • Type: Menu tab
        • Title: Заявки
        • Weight: 3
        • Parent menu item: Already exists
    • Relationships:
      Жмем кнопку Override,
      • Изменяем отношение Node: Content Profile:
        • Relationship: requester
    • Arguments:
      Жмем кнопку Override,
      • Удаляем аргумент User relationships: Requester user
      • Добавляем аргумент User relationships: Requestee user и настраиваем его:
        • Validator options:
          • Validator: User
          • Type of user argument to allow:: Only allow numeric UIDs
        • Action to take if argument is not present: Provide default argument
          • Default argument type: User ID from logged in user
    • Filters:
      Жмем кнопку Override,
      • Изменяем фильтр User: Active:
        • Relationship: requester
      • Изменяем фильтр User relationships: Relationship status:
        • Status: Pending
    • Fields:
      Жмем кнопку Override,
      • Изменяем поле User: Name:
        • Relationship: requester

  • Темизация views

    Темизировать мы надо 2 шаблона, где будем выводить поля "руками".

    • views-view-fields--friends--block.tpl.php - шаблон для блоков.
      код:
      <?php
      $uid = $row->users_user_relationships_uid;
      $name = $fields['name']->raw;

      // переменная для отображаемого имени пользователя
      if ($fields['field_profile_name_value']->content && $fields['field_profile_surname_value']->content) {
        $name = $fields['field_profile_name_value']->content .' '. $fields['field_profile_surname_value']->content;
      }
      elseif ($fields['field_profile_name_value']->content) {
        $name = $fields['field_profile_name_value']->content;
      }

      $tmp = explode(' ', $name, 2);
      if (count($tmp) == 2) {
        $tmp[1] = '<small>'. $tmp[1] .'</small>';
      }
      $name = implode('<br/>', $tmp);

      if ($fields['field_profile_photo_fid']->raw) {
        $photo = $fields['field_profile_photo_fid']->content;
      }
      else {
        $photo = theme('imagecache', 'photo-50x50', 'sites/default/files/profile_photos/default.png');
      }

      ?>
      <div class="friend-block">
      <?php print l($photo, 'user/'. $uid, array('html' => TRUE));?>
      <span class="user-name"><?php print l($name, 'user/'. $uid, array('html' => TRUE));?></span>
      </div>

      CSS в тему:
      .block-views .view-friends td {
        vertical-align:top;
      }
      .friend-block {
        width: 50px;
        text-align:center;
        overflow: hidden;
      }
      .friend-block .user-name {
        font-size:11px;
      }
    • views-view-fields--friends--page.tpl.php - шаблон для страниц.
      код:
      <?php
      $uid = $row->users_user_relationships_uid;
      global $user;

      if ($view->current_display == 'page_4') {
        $uid = $row->users_user_relationships_1_uid;
      }

      $name = $fields['name']->raw;

      // переменная для отображаемого имени пользователя
      if ($fields['field_profile_name_value']->content && $fields['field_profile_surname_value']->content) {
        $name = $fields['field_profile_name_value']->content .' '. $fields['field_profile_surname_value']->content;
      }
      elseif ($fields['field_profile_name_value']->content) {
        $name = $fields['field_profile_name_value']->content;
      }

      if ($fields['field_profile_photo_fid']->raw) {
        $photo = $fields['field_profile_photo_fid']->content;
      }
      else {
        $photo = theme('imagecache', 'photo-100x100', 'sites/default/files/profile_photos/default.png');
      }

      ?>
      <div class="friend-page">
        <div class="friend-left">
          <?php print l($photo, 'user/'. $uid, array('html' => TRUE));?>
        </div>
        <div class="friend-right">
        <span class="user-name"><?php print l($name, 'user/'. $uid, array('html' => TRUE));?></span>

        <?php
        $user_actions[] = l('Отправить сообщение', "messages/new/$uid", array('query' => drupal_get_destination()));
        // разная сслыка в зависимоти от вида
        if ($view->current_display == 'page_4') {
          $user_actions[] = l('Добавить в друзья', "user/$user->uid/relationships/requested/$row->rid/approve", array('query' => drupal_get_destination(), 'attributes' => array('class' => 'user_relationships_popup_link')));
          $user_actions[] = l('Отклонить заявку', "user/$user->uid/relationships/requested/$row->rid/disapprove", array('query' => drupal_get_destination(), 'attributes' => array('class' => 'user_relationships_popup_link')));
        }
        else {
          $user_actions[] = l('Удалить из друзей', "user/$user->uid/relationships/$row->rid/remove", array('query' => drupal_get_destination(), 'attributes' => array('class' => 'user_relationships_popup_link')));
        }
        print theme('item_list', $user_actions);
        ?>
        </div>
        <div class="clear-block"></div>
      </div>

      CSS в тему:
      .friend-page .friend-left {
        float:left;
        width:120px;
      }
      .friend-page {
        border-bottom:1px solid #ddd;
        padding:10px 0;
      }
      .views-row-first .friend-page {
        padding-top:0;
      }
      .views-row-last .friend-page {
        border:none;
        padding-bottom:0;
      }
      .friend-page .friend-right .item-list {
        float: right;
      }

    Теперь сделаем заголовок блока в виде ссылки на соответствующую страницу, для этого создадим два шаблона в папке темы: block-views-friends-block_1.tpl.php и block-views-friends-block_2.tpl.php. Код у них идентичный, кроме url, во втором блоке пишите friends/online.

    <div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="clear-block block block-<?php print $block->module ?>">

    <?php if (!empty($block->subject)): ?>
      <h2 class="title">
        <?php
        global $user;
        if ((arg(0) == 'user' && is_numeric(arg(1))) && $user->uid != arg(1)) {
          $uid = arg(1);
          print l($block->subject, 'friends/'. $uid);
        }
        else {
          print l($block->subject, 'friends');
        }
        ?>
      </h2>
    <?php endif;?>

      <div class="content"><?php print $block->content ?></div>
    </div>

    CSS в тему:
    #block-views-friends-block_1 h2.title,
    #block-views-friends-block_2 h2.title {
      font-family: Arial;
      font-size: 14px;
      font-weight: bold;
    }
    #block-views-friends-block_1 h2.title a,
    #block-views-friends-block_2 h2.title a {
      color:#494949;
    }
    #block-views-friends-block_1 table,
    #block-views-friends-block_2 table {
      margin:0;
    }

    Должно получиться нечто вроде этого.


    Вывод ссылок на действия добавить в друзья на странице пользователя

    Добавим ссылки Добавить в друзья и Удалить из друзей. В функцию mymodule_preprocess_user_profile добавим код, сразу после $user_actions = array();. Не забудьте в коде $ur_id = 1; изменить на id своего relationship.

      $ur_id = 1; // id relationship
     
      // ссылки на добавление/удаление друзей
      if (module_exists('user_relationships_api')) {
        if (!user_access('can have relationships') || $user->uid != $account->uid) {
          $existing_relationships = user_relationships_load(array('between' => array($user->uid, $account->uid)), array('sort' => 'rtid'));
          if (!isset($existing_relationships[$ur_id])) {
            $user_actions[] = l('Добавить в друзья', "relationship/{$account->uid}/request/$ur_id", array('query' => drupal_get_destination(), 'html'  => TRUE, 'attributes' => array('class' => 'user_relationships_popup_link')));
          }
          elseif ($existing_relationships[$ur_id][0]->approved) {
            $user_actions[] = l('Удалить из друзей', "user/{$account->uid}/relationships/{$existing_relationships[$ur_id][0]->rid}/remove", array('query' => drupal_get_destination(), 'attributes' => array('class' => 'user_relationships_popup_link')));
          }
        }
      }


    Личные сообщения

    Privatemsg - модуль для личный сообщений. Установите 6.x-2.x-dev версию и включите права доступа для зарегистрированных пользователей read privatemsg, write privatemsg и delete privatemsg.
    Модуль практически не нуждается в особых настройках, поэтому сразу приступим к темизации.

    Темизация Privatemsg

    Сначала удалим с помощью хука список участников беседы:

    function mymodule_privatemsg_view_messages_alter(&$content) {
      unset($content['participants']);
    }

    В свою тему в template.php:
    function ИМЯТЕМЫ_privatemsg_list_field__last_updated($thread) {
      $field = array();
      $field['data'] = format_date($thread['last_updated'], 'custom', 'j F Y в H:i');
      $field['class'] = 'privatemsg-list-date';
      return $field;
    }

    Здесь немного поправили формат даты в колонке на странице messages.
    Теперь будем темизировать сами сообщения, для этого в mymodule.module создадим функцию mymodule_preprocess_privatemsg_view:
    function mymodule_preprocess_privatemsg_view(&$vars) {
      $message = $vars['message'];
      // загружаем профиль
      $profile = content_profile_load('profile', $message['author']->uid);

      // выводим фото пользователя
      if ($profile->field_profile_photo[0]['fid']) {
        $photo = theme('imagecache', 'photo-50x50', $profile->field_profile_photo[0]['filepath']);
      }
      else {
        $photo = theme('imagecache', 'photo-50x50', 'sites/default/files/profile_photos/default.png');
      }
      // добавляем для неё переменную в шаблон privatemsg-view.tpl.php
      $vars['author_picture'] = l($photo, 'user/'. $message['author']->uid, array('html' => TRUE));
    }

    Также добавим шаблон privatemsg-view.tpl.php в папку с темой.
    <?php
      //each file loads it's own styles because we cant predict which file will be loaded
      drupal_add_css(drupal_get_path('module', 'privatemsg').'/styles/privatemsg-view.css');
    ?>
    <div class="privatemsg-box-fb" id="privatemsg-mid-<?php print $mid; ?>">
      <div class="left-column">
        <div class="avatar-fb">
          <?php print $author_picture; ?>
        </div>
      </div>
      <div class="middle-column">
        <div class="name">
          <?php print $author_name_link; ?>
        </div>
        <div class="date">
          <?php print format_date($message['timestamp'], 'custom', 'j M Y в H:i'); ?>
        </div>
      </div>
      <div class="right-column">
        <div class="message-body">
          <?php print $message_body; ?>
        </div>
        <?php if ( isset($message_actions) ) : ?>
          <div class="message-actions">
            <?php print $message_actions; ?>
          </div>
        <?php endif ?>
      </div>
      <div class="clear-block bottom-border"></div>
    </div>

    и
    CSS в тему:
    .privatemsg-view-pager {
        margin: 20px 0 20px 200px;
    }
    .privatemsg-box-fb {
        text-align: left;
    }
    .privatemsg-box-fb .avatar-fb {
        margin: 5px;
        text-align: center;
    }
    .privatemsg-box-fb .picture {
        float: none;
        padding: 0;
    }
    .left-column {
      width:auto;
      float: left;
    }
    .middle-column {
        float: left;
        text-align:left;
        width: 150px;
    }
    .right-column {
      margin:0 0 0 210px;
    }
    .bottom-border {
      border-bottom:1px solid #E9EFF3;
      margin:10px 0;
    }
    .message-actions ul {
      padding:0;
      font-size:11px;
    }
    .date {
      font-size:10px;
      margin:0;
      color: #777777;
    }
    .name {
      font-size:12px;
      font-weight:bold;
      margin:5px 0 0;
    }
    .message-body {
      font-size:14px;
    }

    Темизированная страница сообщений:


    Вывод ссылки "Отправить сообщение" на странице пользователя

    Добавим в профиль ссылку "Отправить сообщение", для этого в функцию mymodule_preprocess_user_profile добавим код, сразу после $user_actions = array();.

    // выводим ссылку для отправки сообщений
      if (module_exists('privatemsg')) {
        if ($user->uid != $account->uid) {
          if ($url = privatemsg_get_link(array($account))) {
            $user_actions[] = l('Отправить сообщение', $url, array('query' => drupal_get_destination()));
          }
        }
      }

    Следующие 2 раздела описывать подробно описывать не буду, там всё достаточно понятно.

    Рейтинги


    Уведомления

    Все вышеперечисленные модули так или иначе интегрированы с молулем Rules. С помощью него можно создавать реакции на события, такие как: создание определенного материала, предложение дружбы и тд. Но почти в каждом модуле есть и собственная система уведомлений, можно использовать и её.

    Меню пользователя

    В меню добавим ссылки:

    • Моя страница
    • Мои друзья
    • Мои сообщения
    • Настройки аккаунта

    Нужно определить в модуле блок, копируем код:

    function mymodule_block($op = 'list', $delta = 0, $edit = array()) {
      if ('list' == $op) {
        $blocks['user-menu'] = array(
          'info' => t('User menu'),
          'cache' => BLOCK_NO_CACHE,
        );

        return $blocks;
      }
      elseif ('view' == $op) {
        $block = array();
        switch ($delta) {
          case 'user-menu':
            $block = mymodule_block_user_menu();
            break;
        }
        return $block;
      }
    }

    function mymodule_block_user_menu() {
      global $user;
      $links = array();

      $links[] = l('Моя Страница', 'user/'. $user->uid) . l('ред.', 'user/'. $user->uid .'/profile/profile', array('attributes' => array('class' => 'user-edit-link')));
      // Мои друзья
      if (module_exists('user_relationships_api')) {
        if (user_access('can have relationships') && user_access('maintain own relationships')) {
          $ur_id = 1; // id relationship

          $title = 'Мои Друзья';
          $count = db_result(db_query("SELECT COUNT(rid) FROM {user_relationships} WHERE requestee_id = %d AND approved = 0 AND rtid = %d", $user->uid, $ur_id));
          if ($count) {
           $title .= " (<b>$count</b>)";
           $links[] = l($title, 'friends/request', array('html' => TRUE));
          }
          else {
            $links[] = l($title, 'friends');
          }
        }
      }
      // Мои сообщения
      if (module_exists('privatemsg')) {
        if (privatemsg_user_access('read privatemsg') || privatemsg_user_access('read all private messages') ) {
          $title = 'Мои Сообщения';
          if ($count = privatemsg_unread_count()) {
           $title .= " (<b>$count</b>)";
          }
          $links[] = l($title, privatemsg_get_dynamic_url_prefix($user->uid), array('html' => TRUE));
        }
      }

      $links[] = l('Настройки аккаунта', 'user/'. $user->uid .'/edit');

      if (!empty($links)) {
        $block['content'] = theme('item_list', $links);
      }

      return $block;
    }

    Добавим css в тему:
    a.user-edit-link {
      color:#777777;
      float:right;
    }

    Поместите блок в левый регион и в его настройках сделайте видимым только для зарегистрированных пользователей.

    Стена

    Стену сделаем из комментариев к ноде профиля пользователя. Для того чтобы добавить комментарии на страницу с профилем добавим в функцию mymodule_preprocess_user_profile код:

    if (function_exists('comment_bonus_api_comment_render')) {
      $variables['wall'] = comment_bonus_api_comment_render($profile);
    }
    elseif (function_exists('comment_render')) {
      $variables['wall'] = comment_render($profile);
    }

    и в шаблоне user-profile.tpl.php выведем эту переменную:
    <div class="wall"><h3>Стена</h3><?php print $wall; ?></div>


    Настройка комментариев

    В настройках типа profile:

    • Default comment setting: Read/Write
    • Comment subject field: Disabled
    • Default comments per page: 300
    • Preview comment: Optional
    • Location of comment submission form: Display below post or comments

    Не забудьте дать права на добавление комментариев зарегистрированным пользователям.

    Настройка AJAX Comments

    Далее установите dev версии модулей AJAX Comments и Comments bonus API.
    На странице admin/settings/ajax_comments Form always expanded: поставить галочку, Default row count: 3, Content types: Profile.

    Темизация вывода

    Для начала скроем фразу "Сomments", для этого скопируйте файл comment-wrapper.tpl.php из папки модуля Comments bonus API в папку с вашей темой и удалите строку:

    <?php if ($node->type != 'forum'): ?>
      <h2 class="comments"><?php print t('Comments'); ?></h2>
    <?php endif; ?>

    Следующим шагом темизируем вывод комментариев, для этого в mymodule.module добавим:
    function mymodule_preprocess_comment(&$vars) {
      if (isset($vars['node'])) {
        $vars['template_files'][] = 'comment-'. $vars['node']->type;
      }

      if ($vars['node']->type == 'profile') {
        $comment = $vars['comment'];
        $profile = content_profile_load('profile', $comment->uid);

        // выводим фото пользователя
        if ($profile->field_profile_photo[0]['fid']) {
          $photo = theme('imagecache', 'photo-50x50', $profile->field_profile_photo[0]['filepath']);
        }
        else {
          $photo = theme('imagecache', 'photo-50x50', 'sites/default/files/profile_photos/default.png');
        }
        // добавляем для неё переменную в шаблон privatemsg-view.tpl.php
        $vars['author_picture'] = l($photo, 'user/'. $comment->uid, array('html' => TRUE));
      }
    }

    Теперь мы можем добавить шаблон комментария только для типа profile, в папке с темой comment-profile.tpl.php:
    <div class="comment<?php print ($comment->new) ? ' comment-new' : ''; print ' '. $status; print ' '. $zebra; ?>">
      <div class="comment-left">
        <div class="avatar"><?php print $author_picture ?></div>
      </div>
      <div class="comment-right">
        <div class="user"><?php print $author ?></div>
        <div class="content">
          <?php print $content ?>
        </div>
        <div class="meta">
          <div class="date"><?php print format_date($comment->timestamp, 'custom', 'j M Y в H:i') ?></div>
          <?php if ($links): ?>
            <div class="links"><?php print $links ?></div>
          <?php endif; ?>
        </div>
        <div class="clear-block"></div>
      </div>
    </div>

    CSS в тему:
    .wall h3 {
      font-family: Arial;
      font-size: 14px;
      font-weight: bold;
    }
    .wall #comments,
    .wall #comments .comment {
      margin:0;
      padding:0;
      border:none;
    }
    .wall #comments {
      border-top: 1px solid #CCCCCC;
    }
    .wall #comments .comment {
      padding:10px 0;
      border-bottom: 1px solid #CCCCCC;
    }
    .wall .comment-left {
      float:left;
    }
    .wall .comment-right {
      margin-left:60px;
    }
    .wall .meta .date,
    .wall .meta div.links {
      float:left;
      font-size: 10px;
    }
    .wall .meta .date {
      margin-right:10px;
    }
    .wall .user {
      font-weight:bold;
      font-size:11px;
    }
    .wall .box h2,
    .wall h2.title {
      display:none;
    }

    Удалим лишнее на форме. В mymodule_form_alter:
    if ($form_id == 'comment_form') {
      $form['comment_filter']['comment']['#title'] = '';
      $form['comment_filter']['comment']['#rows'] = 3;
      unset($form['_author'], $form['preview']);
    }

    В следующей части рассмотрим контент в социальных сетях.

    +
    15
    -
    23 Сентября 2011, 12:52

    Комментарии (154)

    аватар: Valeratal
    Valeratal #
    +
    0
    -

    спасибо!

    аватар: donsov
    donsov #
    +
    0
    -

    Статья супер, у меня сейчас задача вывести field group tabs то есть вкладки я так понял тут это реализовано через preprocess ?

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    вкладки в профиле не выводятся, только на форме, совершенно стандартным способом

    аватар: leramulina
    leramulina #
    +
    0
    -

    Прошу извинить, поясните, пожалуйста, когда пишется "views-view-fields--friends--block.tpl.php - шаблон для блоков." это значит, что надо создать файл с названием "views-view-fields--friends--block.tpl.php" или текущий "block.tpl.php" заменить пользовательским с нижеприведенным кодом?

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    создать, block.tpl.php - это шаблон для блока, а views-view-fields--friends--block.tpl.php шаблон для вывода ряда (тоесть группы полей одной сущности) из модуля views

    аватар: leramulina
    leramulina #
    +
    0
    -

    Еще раз простите мою тупизну. То есть создается файл views-view-fields--friends--block.tpl.php и в него вписывается нижеследующий код?

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    да, не забудьте в настройках views в разделе Theme: Information нажать кнопку Rescan template files, там должно подсветиться имя этого шаблона

    аватар: leramulina
    leramulina #
    +
    0
    -

    И еще на этапе создания views для друзей в предпросмотре представления появляться ошибка

    user warning: Unknown column 'field_profile_photo_fid' in 'field list' query: SELECT COUNT(*) FROM (SELECT field_profile_photo_fid AS field_profile_photo_fid, field_profile_photo_list AS field_profile_photo_list, field_profile_photo_data AS field_profile_photo_data FROM user_relationships user_relationships LEFT JOIN users users_user_relationships ON user_relationships.uid = users_user_relationships.uid WHERE users_user_relationships.status = 0 ) count_alias in D:\xampp\htdocs\social\sites\all\modules\views\plugins\views_plugin_pager.inc on line 141.

    Значит ли это, что я сделала какую-то ошибку?

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    скажите версии модулей views и user_relationships?

    аватар: leramulina
    leramulina #
    +
    0
    -

    Views 6.x-3.0-alpha4
    UR-API 6.x-1.0

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    попробуйте с 6.x-2.12, с 3й веткой какие-то проблемы

    аватар: leramulina
    leramulina #
    +
    0
    -

    field_profile_about - одно и то же машинное название дважды. Система так не разрешает.

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    извините, О сайте нет такого поля, я ошибся в статье. Спасибо что заметили.

    аватар: leramulina
    leramulina #
    +
    -1
    -

    Извините, не очень понятна фраза

    В настройках admin/settings/site-information за главную страницу установить mymodule_frontpage.

    в смысле в поле

    Default front page: *
    http://localhost/social/user/1 node
    The home page displays content from this relative URL. If unsure, specify "node".

    Что надо ввести вместо node?

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    mymodule_frontpage

    аватар: leramulina
    leramulina #
    +
    0
    -

    Ой, извините, раньше что-то не разрешало вписать этот адрес, а теперь разрешило. Переделываю просто еще раз с нуля все шаг за шагом. Спасибо!

    аватар: userdruit
    userdruit #
    +
    0
    -

    при отправке в профиле сообщения на стену перекидывает на страницу профиля (не user_profles, а на страницу типа материала profile).

    Как от этого избавится???

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    тут же написано самая последняя функция

    аватар: userdruit
    userdruit #
    +
    0
    -

    Да да, пропустил это. Спасибо.

    аватар: userdruit
    userdruit #
    +
    0
    -

    Вопросик как для типа материала profile вместо отправить комментарий вывести - написать на стену (например)?

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    в самом конце статьи код для изменения формы комментов, туда же внутрь в условия добавить:

    if (arg(0) == 'user') {
      $form['submit']['#value'] = 'Написать на стену';
    }

    аватар: userdruit
    userdruit #
    +
    0
    -

    нене, мне не кнопку самбита. а над формой текст отправить комментарий или комментировать и так как профиль с комментариями не вяжется - хотелось бы "Написать на стену"

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    никак не изменить, только скрыть средствами css

    аватар: userdruit
    userdruit #
    +
    0
    -

    ну тогда скроется везде...

    аватар: leramulina
    leramulina #
    +
    0
    -

    Переставила views на 2.12

    На вот этом этапе создания страницы Друзья онлайн
    В Relationship: разрешается только один вариант - "requestee"

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    при создании вида View type: User relationship выбрали? на форме там где название вида вводится

    аватар: Максим Горин
    Максим Горин #
    +
    0
    -

    у меня тоже

    аватар: leramulina
    leramulina #
    +
    -1
    -

    Удаляем аргумент User relationships: Requester user
    Удаляем аргумент User relationships: Requestee user и настраиваем его:

    В смысле добавляем и настраиваем?

    Но тогда "Type of user argument to allow:: Only allow numeric UIDs" - не видно такого

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    да добавить, и выше на ваши комментарии я дал ответ.
    И не надо копировать сюда весь текст, делайте свои сообщения короткими. уважайте людей иначе последует бан.

    аватар: userdruit
    userdruit #
    +
    0
    -

    и почему то исчезло под формой комментариев на "стене" плюшки - уведомить меня о новых комментариях. Было бы неплохо получать на ящик сообщения что кто то отписался на стене.

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    когда исчезло? телепатов тут нет, я не обещал совместимость с тысячами модулей

    аватар: userdruit
    userdruit #
    +
    0
    -

    да, нет. я думал что что-то упустил. теперь ясно, что пока уведомлений о написанной на стене записи не реализовано.
    спасибо за статью. усовершенствую код профиля своего.

    аватар: userdruit
    userdruit #
    +
    0
    -

    И почему то у пользователей в их профиле нет стены (комментов) они их видят только у никнейма явл. администратором.

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    может в нодах их профилей стоят запрет на комменты?

    аватар: userdruit
    userdruit #
    +
    0
    -

    все верно. так и было.

    т.е. если раньше комменты были отключены. то у всех 100 000 человек не будут стены так? Вопросы (если можно сюда, можете списать балы если что) ... 1. как включить у всех профилей комменты 2. можно ли на друпале сделать как -то чтобы пользователь сам решал включить ему стену или отключить...

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    1) выполнить запрос

    UPDATE node SET comment = 2 WHERE type = "profile"

    2) можно создать в профиле специальную вкладку для таках настроек. Туда добавлять поля типа int поля в виде чекбокса
    потом в коде где задается переменная $wall добавить условие типа
    if ($profile->field_profile_show_wall[0]['value']) {
    //тут задается переменная
    }

    аватар: userdruit
    userdruit #
    +
    0
    -

    Вашу схему 2 использую для других целей, но я так думаю это решит лишь вопрос показывать не показывать (визуально) а показывать но не отписываться (закрыть отписку)?

    т.е. 3 чекбокса дублирующие варианты комменты и на них подвесить изменения показа комментов. вот такое реализуемо?

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    можно это програмить надо

    аватар: leramulina
    leramulina #
    +
    0
    -

    Спасибо. Все сделала. Все работает.

    аватар: jacob
    jacob #
    +
    0
    -

    Спасибо большое за такой детальный разбор!
    При создании меню пользователя получаю ошибку "Call to undefined function privatemsg_get_dynamic_url_prefix()".

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    попробуйте 6.x-2.x-dev версию privatemsg

    аватар: jacob
    jacob #
    +
    0
    -

    Спасибо, проблема решена)
    Можете так же подсказать версии модулей для аватаров? Для загрузки фотографии в профиль не отображаются изображения - и с этой проблемой сталкивался уже ранее.

    аватар: jacob
    jacob #
    +
    0
    -

    Ещё столкнулся с такой проблемой: новые друзья добавляются в список сразу, до подтверждения, и зарегистрированные юзеры не могут удалить друга - только админ (просто висит загрузка ajax, а при отключении ajax в настройках модуля UR получаю страницу с запрещённым доступом).
    И ещё: может, имеет смысл добавить поля в профайле в регистрацию?

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    проверьте права доступа модуля, и настройки, там есть галочки типа Requires Approval

    аватар: jacob
    jacob #
    +
    0
    -

    Каким образом у вас блок с друзьями вписался так красиво под фотографией? В моём случае, определяя блоки "друзья", "друзья онлайн" в контент, они отвратительно располагаются под сообщениями на стене.
    Ps проблема с удалением друзей осталась

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    наверно у вас в шаблоне user-profile.tpl.php не хватает divов, проверьте код, должны быть 2 колонки
    <div class="profile-left"> и <div class="profile-right">

    аватар: jacob
    jacob #
    +
    0
    -

    Спасибо, не обратил внимание на существование profile-region и выводил блоки в контент. Теперь всё отлично)

    аватар: auger
    auger #
    +
    0
    -

    а у меня при просмотре профля выдает ошибку
    warning: htmlspecialchars() [function.htmlspecialchars]: Invalid multibyte sequence in argument in /home/wmpoorru/domains/wm-poor.ru/public_html/a/includes/bootstrap.inc on line 856.
    warning: htmlspecialchars() [function.htmlspecialchars]: Invalid multibyte sequence in argument in /home/wmpoorru/domains/wm-poor.ru/public_html/a/includes/bootstrap.inc on line 856.

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    это не относится к данной статье, ищите решение на drupal.org

    аватар: Максим Горин
    Максим Горин #
    +
    0
    -

    поменял в mymodule.module на UTF8

    аватар: circlenode
    circlenode #
    +
    0
    -

    Побольше бы таких постов. Спасибо.

    аватар: woken
    woken #
    +
    1
    -

    Хмм..никто не отвечает. Получается что тема уже заезжана.

    аватар: woken
    woken #
    +
    1
    -

    Ещё при попытке загрузить фоторафию выводит ошибку :

    Произошла HTTP ошибка 0. \n/drupal/filefield/ahah/profile/field_profile_photo/0

    аватар: den-g
    den-g #
    +
    0
    -

    При входе на страницу пользователя, падает центральная часть под левую, а правая под центральную (только в IE, другие браузеры нормально) использую тему Garland. В "Средства разработчика" указано что тип документов "совместимый", если явно указать "стандартный" то отображение нормально. как это явно прописать в page.tpl.php? Спасибо.

    аватар: drup-drop
    drup-drop #
    +
    0
    -

    Реально одна из самых полезных статей(если не самая:)), что довелось читать за те пару месяцев, что изучаю Друпал.
    Автору громадное спасибо за труды.

    аватар: Павель Дуров
    Павель Дуров #
    +
    0
    -

    Отличная статья. Не хватает живого примера и сборка целиком? Кто поделится?

    аватар: max_d
    max_d #
    +
    0
    -

    статья отличная! вот только про пользовательские фотоальбомы не сказано...

    аватар: skindust1988
    skindust1988 #
    +
    0
    -

    Действительно интересный материальчик. А Вы серьезно писать не подумывали? Думаю, у Вас бы получилось. По крайней мере, можно было бы очень посещаемый блог получить. Сейчас в интернете с уникальными интересными текстами проблема.

    аватар: max_d
    max_d #
    +
    0
    -

    а через Panels сделать подобную страницу профиля не получится?

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    Получится сделать и этот вариант будет удобен для новичков

    аватар: max_d
    max_d #
    +
    0
    -

    спасибо за ответ.
    мне как новичку и незнающему php, именно такой вариант удобнее.

    аватар: hvn
    hvn #
    +
    0
    -

    Все сделал один в один до стадии "Вот так должен выглядеть профиль после темизации." При загрузке страницы "Мой аккаунт" выходит ошибка "HTTP 500".
    Убирал
    // перекрываем callback функцию
    function mymodule_menu_alter(&$items) {
    $items['user/%user_uid_optional']['page callback'] = 'mymodule_user_view';
    }
    // в отличии от стандартной, здесь нет загрузки стандартного профиля
    function mymodule_user_view($account) {
    drupal_set_title(check_plain($account->name));
    return theme('user_profile', $account);
    }
    открывается пустая страница.
    В чем может быть проблема?

    аватар: hvn
    hvn #
    +
    0
    -

    В дополнение к предыдущей записи. В отчете об ошибке в Друпале сообщение:
    call_user_func_array() expects parameter 1 to be a valid callback, function 'mymodule_user_view' not found or invalid function name в файле Z:\home\drupal\www\includes\menu.inc в строке 349.
    За помощь в решении данной проблемы готов перевести свое спасибо в ваш кошелек WM.

    аватар: hvn
    hvn #
    +
    0
    -

    Проблему устранил, но все данные профиля расположены внизу, под фото, как было написано в одном из постов выше.

    аватар: fermer45
    fermer45 #
    +
    0
    -

    Привет! Спасибо за статью, очень помогла .
    У меня есть проблемка одна - не отображается массив $user_actions на странице профиля. Не могу понять почему.
    В user-profile.tpl стоит print $user_actions, и всё равно не отображает=(

    аватар: fermer45
    fermer45 #
    +
    0
    -

    Доделал до конца как написано в посте - все заработало.
    Новый вопрос: как в личных сообщениях сделать так, чтобы месседжы отправлялись не usernam'у на имя и фамилию?

    аватар: maztakillars
    maztakillars #
    +
    0
    -

    Все сделал как надо дошол до конечного пункта, "вот так должна выглядить страница"

    Ну она у меня выглядит так.. сперва вот такая ошибка

    warning: htmlspecialchars() [function.htmlspecialchars]: Invalid multibyte sequence in argument in /home/spainbook/domains/spainbook.ru/public_html/includes/bootstrap.inc on line 856.
    warning: htmlspecialchars() [function.htmlspecialchars]: Invalid multibyte sequence in argument in /home/spainbook/domains/spainbook.ru/public_html/includes/bootstrap.inc on line 856.

    ну и ниже Дефаулт фото - которое я загрузил в Профиль_юзерс. И ВСЁ. Почему именно так?

    аватар: Crysis
    Crysis #
    +
    0
    -

    Всем привет.. это мой первый проект на Drupal.. может кто подскажет куда это писать?

    Неиспользуемое поле title мы скрываем и при сохранении будем менять значение на имя пользователя используя код в модуле:
    function mymodule_form_alter(&$form, $form_state, $form_id) {
      if ('profile_node_form' == $form_id) {
        $form['title']['#type'] = 'value';
        $form['title']['#required'] = FALSE;
      }
    }

    function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
      if ($node->type == 'profile' && $op == 'presave') {
        $node->title = $node->name;
      }
    }

    function mymodule_privatemsg_view_messages_alter(&$content) {
      unset($content['participants']);
    }

    if (function_exists('comment_bonus_api_comment_render')) {
      $variables['wall'] = comment_bonus_api_comment_render($profile);
    }
    elseif (function_exists('comment_render')) {
      $variables['wall'] = comment_render($profile);
    }

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    в свой модуль, для первого проекта сильно сложную тему взяли

    аватар: Crysis
    Crysis #
    +
    1
    -

    Спс, ничего разберусь.. невпервой)

    аватар: Crysis
    Crysis #
    +
    0
    -

    Вопросик по модулю views
    использую версию 6.x-2.16 ...

    Установливаю традиционо) в site/all/modules, далее включаю все компоненты модуля views.
    Далее иду по адресу admin/build/views ... и мой проект радует меня белым экраном)
    На Windows машине и на Linux ситуация аналогичная.

    подробней можно посмотреть на ютуб:
    http://www.youtube.com/watch?v=Pn7ELVRSvBY&feature=youtu.be

    аватар: max_d
    max_d #
    +
    0
    -

    смотрите логи веб-сервера и php. пустая страница это обычно 50х ошибка.
    Upd: кеш очистить после установки модулей, тоже помогает.

    аватар: Crysis
    Crysis #
    +
    0
    -

    Вот на эти строчки жалуется:
    http://imglink.ru/show-image.php?id=cde84744b13ec6f111819300030b62ad

    аватар: max_d
    max_d #
    +
    0
    -

    ну там же английским по-белому написано: не могу открыть директорию sites/all/modules/views, доступ запрещен.
    используйте chmod, chown или как-то еще поправьте права доступа на директории и файлы, чтобы веб-сервер мог к ним обращаться.

    аватар: Crysis
    Crysis #
    +
    0
    -

    Вообшем права на папку поменял непомогло
    перенес проект на Денвер все зароботало, отключил несколько модулей, захожу в Views и опять белый экран

    Потом ОЧИСТИЛ в БД таблицы cache_* и sessions, все заработало
    далее уже на Денвере отключил несколько модулей и опять белый эран в Views,очистил таблицы и опять все работает

    в Ubuntu тоже самое! в log файле никаких ошибок!
    В чем проблема?

    аватар: max_d
    max_d #
    +
    0
    -

    у меня тоже на шестерке при установке-удалении, включении-отключении модулей такое случается временами. иногда помогает просто обновить страницу, а иногда приходится очищать кеш вручную, через drush cc all или в Admin menu.

    аватар: Askin13
    Askin13 #
    +
    0
    -

    использую views 6.x-2.16. У меня нет поля "Type of user argument to allow:: Only allow numeric UIDs". в чем может быть проблема?
    p.s. большое спасибо за статью, очень полезная.

    аватар: Crysis
    Crysis #
    +
    0
    -

    Вообщем с Views разобрался)
    но после настройки Views на страницах Друзья, Друзья онлайн, Заявки и на странице профил где я включил (показывать в профиле в виде блока)
    так же тематизировал шаблон и добавил нужное в Css
    выводится вот такой код

    http://imglink.ru/show-image.php?id=0fcbd532c30e33308be3f584abb3d8e6

    http://imglink.ru/show-image.php?id=8fdaf12fb23087f3cee3fca58bb10b5d

    аватар: max_d
    max_d #
    +
    0
    -

    в настройках views отладка включена?

    аватар: Crysis
    Crysis #
    +
    0
    -

    У меня утановлен модуль Devel
    отключил во вкладке Tools функкцию:
    Enable views performance statistics via the Devel module
    и запросов нестало

    аватар: sergeys86
    sergeys86 #
    +
    0
    -

    у меня такой вопрос - mymodule.module - это что за файл, он так называется или как то иначе? где он должен находиться, какой путь?

    аватар: max_d
    max_d #
    +
    1
    -

    это файл, который вы должны создать, находиться он должен в папке mymodule, там же где и остальные модули, например, sites/all/modules

    аватар: sergeys86
    sergeys86 #
    +
    0
    -

    Неиспользуемое поле title мы скрываем и при сохранении будем менять значение на имя пользователя используя код в модуле:

    Этот title как скрыть? в каком файле код менять?

    аватар: max_d
    max_d #
    +
    1
    -

    В mymodule.module
    mymodule_ в именах функций указывает на принадлежность этому модулю или теме. почитайте какую-нить статью по созданию модулей в друпале, тогда многое станет проще понять здесь.
    function mymodule_...

    аватар: Crysis
    Crysis #
    +
    0
    -

    Статья хорошая, спасибо)
    все сделал все работает тока на стене писать ничего нельзя
    http://imglink.ru/show-image.php?id=ccee705661871b2ad4d59c66a554b020
    и один вопрос по статье.. из любопытства.. А КНОПКА ВЫХОД ГДЕ))?

    аватар: widg
    widg #
    +
    0
    -

    немогу решить вопрос с кодировкой ����� вот такие символы вместо Имя, Фамилия, Пол, Стена... а введённые данный нормально отображаются, куда копать?

    аватар: Crysis
    Crysis #
    +
    2
    -

    Кодировку поменяйте в файле mymodule.module или в user-profile.tpl.php на UTF-8

    аватар: widg
    widg #
    +
    0
    -

    спасибо! помог!

    аватар: Crysis
    Crysis #
    +
    0
    -

    У меня дак нету такого в mymodule

    Удалим лишнее на форме. В mymodule_form_alter:
    if ($form_id == 'comment_form') {
      $form['comment_filter']['comment']['#title'] = '';
      $form['comment_filter']['comment']['#rows'] = 3;
      unset($form['_author'], $form['preview']);
    }

    http://imglink.ru/show-image.php?id=e60eafac80904de6c7e3d65acad0af27

    аватар: max_d
    max_d #
    +
    0
    -

    автор имел в виду, что нужно эти строки вставить в mymodule.

    аватар: Crysis
    Crysis #
    +
    0
    -

    хех)
    ну там просто написанно Удалить (Удалим лишнее на форме.)
    нетак понял

    вот туда хоть вставил? Все работает кроме стены
    http://imglink.ru/show-image.php?id=503a65d2dcdfd446868f42a60550ca5f

    просто это мой первый проект на данной CMS

    аватар: max_d
    max_d #
    +
    0
    -

    для первого проекта это сложноватая статья. изучите хотя бы азы создания модулей в друпале, работу с хуками, темами, иначе решение каждой непонятной мелочи из этой статьи у вас будет отнимать массу времени.

    аватар: Crysis
    Crysis #
    +
    0
    -

    да.. но вопрос так и остался отрытым
    у меня тока со стеной проблемы
    Я всегда делаю то, чего я не умею, чтобы этому научиться.

    аватар: max_d
    max_d #
    +
    0
    -

    со стеной я вам подсказать не могу.

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    почти правильно, должно получиться так:

    function mymodule_form_alter(&$form, $form_state, $form_id) {
      if ($form_id == 'profile_node_form') {
        $form['title']['#type'] = 'value';
        $form['title']['#required'] = FALSE;
      }

      if ($form_id == 'comment_form') {
        $form['comment_filter']['comment']['#title'] = '';
        $form['comment_filter']['comment']['#rows'] = 3;
        unset($form['_author'], $form['preview']);
      }
    }

    аватар: Crysis
    Crysis #
    +
    0
    -

    спасибо! помогли)
    у меня тока вопрос с переменной для коментариев остался
    пробовал вывести как:

    <?php if ($profile_comment): ?><td><div class="wall"><h3>Стена</h3><?php print $wall; ?></div></td><?php print $profile_comment; ?><?php endif; ?>

    ничего неполучилось
    http://imglink.ru/show-image.php?id=34df24a821ff791955af0b1d5dfa9604

    аватар: Crysis
    Crysis #
    +
    0
    -

    как быть)?

    аватар: Crysis
    Crysis #
    +
    0
    -

    Пробавал деже так, результат аналогичный
    http://imglink.ru/show-image.php?id=a7897b7109ca8d3556cf7d96b8d8eb4d

    аватар: pasha5282
    pasha5282 #
    +
    1
    -

    Ребята! в кого нормально все работает, пожалуйста поделитесь готовым решением!, а то ошибки уже замучили 8 раз уже все переделываю и постоянно одно и тоже, при перезагрузках радует белый экран и красным высвечивает всякие ошибки.

    Пожалуйста выложите готовое решение в кого все норм работает, где то на файлообменик или яндекс файлы, желательно тему и модуль. а лучше весь сайт)
    P.S.при запуске ссылку на ваш сайт гарантирую!

    аватар: pasha5282
    pasha5282 #
    +
    1
    -

    отлично все работает кроме отображения друзей на страничке.
    Вопрос... этих друзей что нужно выводить блоком views и поставить отображение только на глав стран?
    Подскажите плз. как это реализовать.

    аватар: widg
    widg #
    +
    0
    -

    так я и не понял, готовое решение дали только pasha5282 или надо просить!? поделитесь со мной тоже! Пожалуста.

    аватар: Максим Горин
    Максим Горин #
    +
    0
    -


    Подскажите, как быть.

    аватар: Максим Горин
    Максим Горин #
    +
    1
    -

    Заработало!!! Спасибо!!! Кодировку поменял в mymodule.module!

    аватар: pasha5282
    pasha5282 #
    +
    0
    -

    не подключается блоки с темизацией для отображения друзей, block-views-friends-block_1.tpl.php и _2.tpl.php их просто не видит вюшка, как это исправить?, остальная темизация подключилась.

    аватар: Максим Горин
    Максим Горин #
    +
    0
    -

    В настройках Views, в 3-м пункте:
    3.Добавляем отображение типа page.
    При установке (Page settings: Path: friends/list) возникает ошибка

    аватар: Максим Горин
    Максим Горин #
    +
    0
    -

    Views 6.x-2.16
    UR-API 6.x-1.1

    аватар: Максим Горин
    Максим Горин #
    +
    0
    -

    как быть?

    аватар: Максим Горин
    Максим Горин #
    +
    0
    -

    Решилась проблема
    вместо views 6.x-2.16 поставил 6.x-2.12

    аватар: derron
    derron #
    +
    0
    -

    У меня такая же проблема, но замена views на 2.12 не спасла.... что делать? в чем еще может быть загвоздка?

    Ошибка:
    user warning: Unknown column 'field_profile_photo_fid' in 'field list' query: SELECT user_relationships.rid AS rid, field_profile_photo_fid, field_profile_photo_list, field_profile_photo_data, RAND() AS _random FROM user_relationships user_relationships LEFT JOIN users users_user_relationships ON user_relationships.requestee_id = users_user_relationships.uid LEFT JOIN users users_user_relationships_1 ON user_relationships.requester_id = users_user_relationships_1.uid WHERE (users_user_relationships.status = 0) AND (user_relationships.requester_id = 9 ) ORDER BY _random ASC LIMIT 0, 6 in /home/****/public_html/sites/all/modules/views/includes/view.inc on line 810.

    Ругается на

      function render($display_id = NULL) {
        $this->execute($display_id);

        // Check to see if the build failed.
        if (!empty($this->build_info['fail'])) {
          return;
        }

    З.Ы. Версия views уже 6.х-2.16

    аватар: ansebul
    ansebul #
    +
    0
    -

    Для views-6.x-2.16 вьюхи "Друзья" не выводят ничего кроме ника пользователя, хотя, если выполнить SQL-запрос из live preview напрямую в базе, то он возвращает все данные из профиля (имя, фамилию, фото).
    Проблема в длинных алиасах полей, вот запрос:

    SELECT user_relationships.rid AS rid,
       node_users_user_relationships_node_data_field_profile_photo.field_profile_photo_fid AS node_users_user_relationships_node_data_field_profile_photo_field_profile_photo_fid,
       node_users_user_relationships_node_data_field_profile_photo.field_profile_photo_list AS node_users_user_relationships_node_data_field_profile_photo_field_profile_photo_list,
       node_users_user_relationships_node_data_field_profile_photo.field_profile_photo_data AS node_users_user_relationships_node_data_field_profile_photo_field_profile_photo_data,
       node_users_user_relationships.nid AS node_users_user_relationships_nid,
       node_users_user_relationships.type AS node_users_user_relationships_type,
       node_users_user_relationships.vid AS node_users_user_relationships_vid,
       node_users_user_relationships_node_data_field_profile_photo.field_profile_name_value AS node_users_user_relationships_node_data_field_profile_photo_field_profile_name_value,
       node_users_user_relationships_node_data_field_profile_photo.field_profile_surname_value AS node_users_user_relationships_node_data_field_profile_photo_field_profile_surname_value,
       users_user_relationships__realname.realname AS users_user_relationships__realname_realname,
       users_user_relationships__realname.uid AS users_user_relationships__realname_uid
     FROM user_relationships user_relationships
     LEFT JOIN users users_user_relationships ON user_relationships.requestee_id = users_user_relationships.uid
     LEFT JOIN users users_user_relationships_1 ON user_relationships.requester_id = users_user_relationships_1.uid
     LEFT JOIN node node_users_user_relationships ON users_user_relationships.uid = node_users_user_relationships.uid AND node_users_user_relationships.type = 'profile'
     LEFT JOIN content_type_profile node_users_user_relationships_node_data_field_profile_photo ON node_users_user_relationships.vid = node_users_user_relationships_node_data_field_profile_photo.vid
     LEFT JOIN realname users_user_relationships__realname ON users_user_relationships.uid = users_user_relationships__realname.uid
     WHERE (users_user_relationships.status <> 0) AND (user_relationships.approved = '1') AND (user_relationships.rtid in ('1')) AND (user_relationships.requester_id = 1)
     

    Решается патчем.
    Проблема описана _http://drupal.org/node/571548

    аватар: derron
    derron #
    +
    0
    -

    А еще у меня никак не получается переопределить user_login... в том, что выводится нету регистрации и восстановления пароля.

    аватар: Александр Демидов
    Александр Демидов #
    +
    0
    -

    Очень ценный урок, спасибо. Как с Вами связаться?

    аватар: Александр Демидов
    Александр Демидов #
    +
    0
    -

    Извините конечно но какая версия друпал используется на данном примере. Спасибо.

    аватар: userdruit
    userdruit #
    +
    0
    -

    6

    аватар: userdruit
    userdruit #
    +
    0
    -

    А подскажите если некоторые поля я хочу показывать при клике - показать полностью информацию - кликнув ссылка изменялась бы на скрыть полную информацию...

    много решений показать скрыть/показать div но как сделать что бы ссылка менялась без перезагрузки страницы ?

    аватар: userdruit
    userdruit #
    +
    0
    -

    а профиле (profile ) можно скрыть??? В табах? что бы редактировать можно было бы... и просмотр и настройка акаунта тоже вывести там же где и редактирование... профиля... ???

    аватар: admin
    admin #
    +
    0
    -

    можно, но не для этого урока

    аватар: userdruit
    userdruit #
    +
    0
    -

    Подскажите что -то своими силами не выходит.

    я раньше выводил поля сразу шаблоне профиля

    типа

    if ($profile->field_sex[0]['value'] == '1') {

    print t('Пол: ');
    print ('мужской');
    }
    else {
    if ($profile->field_sex[0]['value'] == '2') {
    print t('Пол: ');
    print ('женский');
    }

    else { }

    }

    а у вас все делается через модуль и выводиться только переменная в шаблоне уже со значением...

    как переделать

    $variables['profile_sex'] = $profile->field_sex[0]['safe'];

    для моего случая???

    аватар: userdruit
    userdruit #
    +
    0
    -

    вопрос снимается. пригляделся к коду и нашел решение .

    аватар: userdruit
    userdruit #
    +
    0
    -

    вопрос:

    если юзер еще вообще не редактировал свое профиль как вывести картинку для фотографиии , а налагично как для недозаполненого профиля

    $variables['profile_photo'] = theme('image', 'sites/default/files/profile_photos/default.png');

    аватар: userdruit
    userdruit #
    +
    0
    -

    еще вопрос по темизации. если юзер не загрузил но сохранил свой профиль - дефолт грузится. если загурзил свою фоту. грузится. а если не заходил и не редактировал вообще свой профиль - не грузится дефолтное.

    как решить такую загвоздку?

    аватар: userdruit
    userdruit #
    +
    0
    -

    Давно хотел спросить про баг на созданной стене.

    после добавления новых комментов они всегда остаются с меткой - new.

    как сделать что бы после обновления страницы коменты были просмотренные :::????

    аватар: userdruit
    userdruit #
    +
    0
    -

    у вас тут Отправить комментарий скрыт в CSS

    А я пытаюсь через box.tpl.php

    вывести разные...

    <div class="box">

    <?php if ($node->type == 'profile') {
       print '<h2>' .('Add post on wall') .'</h2>';
       }
       
       else {
       print '<h2>' .('Add comment') .'</h2>';
       
       }
         
       
       
       ?>



    <div class="content"><?php print $content ?></div>




     
    </div>

    но не выходит для типа нод сделать... разное

    почему ???

    аватар: userdruit
    userdruit #
    +
    0
    -

    c Views 3 и
    user_relationships от Information added by drupal.org packaging script on 2012-01-25, version = "6.x-1.1+1-dev", core = "6.x"

    друзья не выводятся...

    это у всех так или косяк в настройке???

    аватар: mRe
    mRe #
    +
    0
    -

    Народ подскажите пожалуйста, у меня картинка для фото не обрезает

    аватар: admin
    admin #
    +
    0
    -

    image_crop модуль стоит?

    аватар: mRe
    mRe #
    +
    0
    -

    Да стоит

    аватар: userdruit
    userdruit #
    +
    0
    -

    C вьюхой 3 решил вопрос. Правда без темизации блоков.

    Один вопрос на который не нашел ответа.

    1. как вывести сумму взамосвязей (друзей - пусть у нас только друзья) в хедере вьюхи (блок списка друзей)
    2. как вывести сумму взамосвязей онлайн пользователей в хедере вьюхи (блока списка онлайн друзей)

    аватар: toshic
    toshic #
    +
    0
    -

    код для друпал 7 не подходит?

    аватар: Vladouris
    Vladouris #
    +
    0
    -

    Так как же быть с неработающей стеной? Кто-нибудь решил проблему?

    аватар: admin
    admin #
    +
    0
    -

    Добавил в статью список модулей при который всё работает, только что сам всё пересобрал.

    аватар: ansebul
    ansebul #
    +
    0
    -

    Видимо, у mymodule url должен быть другой, не _http://drupal.org/project/mymodule

    аватар: admin
    admin #
    +
    0
    -

    в начале статьи для него заготовка есть

    аватар: Moss
    Moss #
    +
    0
    -

    уже третий раз пробую. затычка на одном и том же месте

    Page settings:
    Path: friends/online
    Menu:
    Type: Menu tab
    Title: Друзья онлайн
    Weight: 2
    Parent menu item: Already exists Already exists нет

    Filters:
    Жмем кнопку Override,
    Добавляем еще один фильтр User: Last access и настраиваем его:
    Relationship: Content Profile Content Profile то же нет, есть requestee и requester
    Operator: Is greater than or equal to
    Value type: An offset from the current time such as....
    Value: -5 minutes

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    с меню ошибка, нет этого пункта, но он и не нужен
    а по поводу Relationship, во 2м пункте в page мы добавили 3 штуки, так почему у вас на следующем шаге оказалось 2? тут вы ошиблись наверное

    аватар: Moss
    Moss #
    +
    0
    -

    во 2м пункте и было 3 ,а потом почему то везде стало 2.

    А как узнать id своего relationship ?

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    создайте заново, в чем проблема?

    аватар: userdruit
    userdruit #
    +
    0
    -

    Вопрос я профиль разбил на две ноды то есть одна нода profile (где о человеке) и вторая нода - setting (разные настройки админа для каждого юзера).

    вопрос как при переходе на форму (редактирования) setting заголовок был не Мой профиль а другой...

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

    аватар: soffran
    soffran #
    +
    0
    -

    Подскажите пожалуйста. Никак не могу добавить дополнительные поля в профиле в контактах: емейл, скайп
    Где я ошибся?
    В модуль вставляю следующее

    $variables['profile_phone'] = $profile->field_profile_phone[0]['safe'];
      $variables['profile_mymail'] = $profile->field_profile_mymail[0]['safe'];
      $variables['profile_skype'] = $profile->field_profile_skype[0]['safe'];

    а в юзер темпл пхпп следующее:

    <?php if ($profile_phone || $profile_mymail || $profile_skype): ?>
        <div class="profile-group">
          <div class="profile-group-label">Контактные данные<?php if (node_access('update', $profile)) print l('Редактировать', "user/$account->uid/profile/profile", array('fragment' => 'tabset-tab-4')); ?></div>
          <div class="profile-group-content">
            <table>
                      <?php if ($profile_phone): ?><tr><td class="field-label">Телефон:</td><td><?php print $profile_phone; ?></td></tr><?php endif; ?>
                      <?php if ($profile_mymail): ?><tr><td class="field-label">Почта:</td><td><?php print $profile_mymail; ?></td></tr><?php endif; ?>
                      <?php if ($profile_skype): ?><tr><td class="field-label">Скайп:</td><td><?php print $profile_skype; ?></td></tr><?php endif; ?>
            </table>
          </div>
        </div>
        <?php endif; ?>

    За ранее большое спасибо за помощь!

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

    аватар: admin
    admin #
    +
    0
    -

    $variables['profile_phone'] = $profile->field_profile_phone[0]['safe'];
      $variables['profile_mymail'] = $profile->field_profile_mymail[0]['safe'];
      $variables['profile_skype'] = $profile->field_profile_skype[0]['safe'];

    так только для текстовых полей, если у вас нестандартные поля, то нужно смотреть какие в объекте $node значения.

    аватар: soffran
    soffran #
    +
    0
    -

    Приношу извинения за свою тупость. Сидел за профилем до утра, уже голова не варила. У меня просто была ошибка в названиях. Благодарю за быстрый отклик.

    аватар: soffran
    soffran #
    +
    0
    -

    Доброе утро!
    У меня снова проблема. В профиле не отображаются "Редактировать страницу" "Изменить фотографию" ссылки на добавление/удаление друзей и отправить сообщения

    В общем все ссылки, которые должны быть ниже фото, как я понял

    Подскажите пожалуйста, в чем может быть проблема, или где я мог ошибиться? За ранее благодарен за помощь.

    аватар: soffran
    soffran #
    +
    0
    -

    Такая мелочь несколько часов мозг выносила... в мумодуль поставил кодировку утф8 и все работает )))))))

    аватар: soffran
    soffran #
    +
    0
    -

    А как сделать, что бы вместо ссылки "Отправить сообщение" поместить туду кнопку "Отправить сообщение"?

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    через css сделать нужный стиль

    аватар: soffran
    soffran #
    +
    0
    -

    Еще вопрос. Когда на страничке своего друга нажимаешь на "Друзья" (Ссылка в названии блока с его друзьями) то попадаю на страницу моих друзей а не его, так должно быть, или я ошибся где то?
    Как сделать, что бы можно было смотреть список друзей друга?

    аватар: pen-exe
    pen-exe #
    +
    0
    -

    Ошибочка была, спасибо!
    в статье заменил код для шаблона блоков тут код перед css котрый

    аватар: soffran
    soffran #
    +
    0
    -

    Я правильно понял, код этого файла views-view-fields--friends--block.tpl.php нужно заменить?
    Заменил его, все равно, попадаю на список своих друзей а не пользователя.

    аватар: Nome
    Nome #
    +
    0
    -

    Вопрос такой: Как все выше перечисленное реализовать используя Profile 2 ? (Ясное дело это 7) Потому как мои познания закончились после создания собственного модуля (основы базы, файлов *.module и *.info) да я читал офф. мануал о создании первого модуля (от начала до конца, по практиковал)))
    P.s
    Буду весьма благодарен за отклик....

    аватар: DrupalUser
    DrupalUser #
    +
    0
    -

    Здравствуйте уважаемые, сделал все по инструкции и в итоге у меня ничего не получилось(. В профиле пользователя выводит 2 ссылки: редактировать и загрузить фото и пустота...Сколько не пытался переделывать заново все тоже самое. Помогите пожалуйста, я сам новичок в друпале поэтому может быть что затупил на какой то мелочи, но вроде бы от инструкции не отступал. В чем может быть дело? модуль создал, код ввел, кэш чистил, update.php пробовал...вторые сутки вожусь никак не могу все до ума довести. Заранее благодарю за помощь

    аватар: pasha5282
    pasha5282 #
    +
    0
    -

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

    аватар: pasha5282
    pasha5282 #
    +
    0
    -

    почему не работает темизация аватарок комментариев, аналогично как в profile для блога?
    добавляю в mymodyle

    // выводим аватарку в блоге
    function mymodule_preprocess_comment(&$vars) {
      if (isset($vars['node'])) {
        $vars['template_files'][] = 'comment-'. $vars['node']->type;
      }
    // подставляю blog на место  profile
      if ($vars['node']->type == 'blog') {
        $comment = $vars['comment'];
        $profile = content_profile_load('profile', $comment->uid);

        // выводим фото пользователя
        if ($profile->field_profile_photo[0]['fid']) {
          $photo = theme('imagecache', 'photo-50x50', $profile->field_profile_photo[0]['filepath']);
        }
        else {
          $photo = theme('imagecache', 'photo-50x50', 'sites/default/files/profile_photos/default.png');
        }
        // добавляем для неё переменную в шаблон comment-blog.tpl.php
        $vars['author_picture'] = l($photo, 'user/'. $comment->uid, array('html' => TRUE));
      }
    }

    Вывожу верстку в comment-blog.tpl.php

    <div class="comment<?php print ($comment->new) ? ' comment-new' : ''; print ' '. $status; print ' '. $zebra; ?>">
      <div class="comment-left">
        <div class="avatar"><?php print $author_picture ?></div>
      </div>
      <div class="comment-right">
        <div class="user"><?php print $author ?></div>
        <div class="content">
          <?php print $content ?>
        </div>
        <div class="meta">
          <div class="date"><?php print format_date($comment->timestamp, 'custom', 'j M Y в H:i') ?></div>
          <?php if ($links): ?>
            <div class="links"><?php print $links ?></div>
          <?php endif; ?>
        </div>
        <div class="clear-block"></div>
      </div>
    </div>

    Все выводится кроме аватарки подскажите как вывести аватарку. кеш чистил

    аватар: Олег Сахаров
    Олег Сахаров #
    +
    0
    -

    Появилась проблема при создании вьюсов, перестали сохраняться выводит сообщения типа Display "По умолчанию" uses fields but there are none defined for it or all are excluded. как решить проблему?

    аватар: Олег Сахаров
    Олег Сахаров #
    +
    0
    -

    Починил, сносом модуля и установкой его заново с обновлением базы поле сноса

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