Создание сайта на CMS Drupal. Профиль пользователя.

Оззи Осборн профиль

Продвигаемся далее в покорении Друпала. Долго собирался с силами и наконец то сделал более-менее приличный профиль пользователя, пример можно посмотреть здесь : Профиль Whellcome. К сожалению на этот раз Российское сообщество Drupal дало весьма мало информации, но благодарен пользователю selff, который нашел и опубликовал там ссылку на нужный материал с сайта Drupal.org.

Большинство рецептов предлагались для Друпала 4.7 и 5.х, так что пришлось немного погуглить чтобы найти подходящие решения для CMS Drupal 6.x. Облегчает участь, то что в его стандартном решении присутствует механизм проверки наличия файла user-profile.tpl.php в теме и подмене стандартного вывода профиля его содержимым.

Итак, приступим. Изначально файл user-profile.tpl.php содержит следущий код, который печатает стандартный вывод профиля пользователя, если вдруг что-то не пойдет, всегда можно им воспользоваться .

<div class="profile">
  <?php print $user_profile; ?>
</div>

Для того, чтобы нам воспользоваться всеми выгодами, которые предоставляет стандартная поставка Drupal 6.x, включим модуль Profile. Он позволяет создавать дополнительно 7 типов полей: текстовое поле, многострочное текстовое поле, флажок, выбор из списка, свободно заполняемый список, URL и дата. Я использовал 6 из них, все, кроме флажка, его вывод пока придется изучить на Drupal.org в английском варианте Handling checkbox profile fields.

  1. Вывод текстового поля.
    Использовался для ввода имени, города проживания, icq и т.п. в конкретном примере так же включена возможность поиска земляков на сайте (пользователей одинаково заполнивших поле профиля "город").
    <?php if( $account->profile_city ):
        $profield = check_plain($account->profile_city);?>
        <dt><?php print t('City:')?></dt> <dd> <?php print l($profield, 'profile/profile_city/'.$profield) ?> </dd>
      <?php endif; ?>
    check_plain($text) функция друпала, конвертирует спец. символы в строку простого текста для показа как HTML. Не забываем вставлять во избежание неприятнстей. Вывод выбора из списка точно такой же, как простого тестового поля.
  2. Вывод свободно заполняемого списка.
    Использовался для списков интересов, профессий, хобби, и т.п. так же в вывод включен поиск "сопрофильников"
    <?php if( $account->profile_interests):
        $fieldname='profile_interests'?>
        <dt><?php print t('interests:')?><dt>
        <dd><ul>
        <?php
        $temp_array = split ( "[\n,]" , $account->$fieldname );
        $count_total = count ( $temp_array );
        for( $counter = 0 ; $counter < $count_total ; $counter ++): ?>
          <?php $link = each ( $temp_array ) ?>
          <li> <?php print l ( $link [ value ], 'profile/' . $fieldname . '/' . preg_replace ( '[\s]' , '+' , trim ( $link [ value ]))) ?> </li>
        <?php endfor ?>
        </ul></dd>
      <?php endif ?>

    Вот как то так .
  3. Вывод многострочного текстового поля.
    Дополнительная информация о себе и самое интересное поле приветствия, выводимое в заголовке профиля пользователя.
    <?php if( $account->profile_treatment ):
      $profield= check_markup($account->profile_treatment); ?>
        <div class="treatment"> <?php print $profield ?> </div>
      <?php endif ?>
    check_markup($text, $format = FILTER_FORMAT_DEFAULT, $check = TRUE) стандартная функция друпала применения фильтра без параметров.
    самый интересный на сегодняшний день пример использования поля здесь: профиль пользователя дневник блоггера
  4. Вывод URL
    <?php if($account->profile_site):
        $profield=check_url($account->profile_site);?>
        <dt>Website URL:</dt><dd><a href="<?php print $profield?>"> <?php print $profield?> </a></dd>
      <?php endif; ?>
    Все ясно, далее...
  5. Вывод даты
    <?php if( $account->profile_birthday ): ?>
        <dt><?php print t('Birthday:')?></dt>
        <dd><?php
           print $account->profile_birthday['day'].".".$account->profile_birthday['month'].".".$account->profile_birthday['year'];
        ?></dd>
      <?php endif ?>

    Не самый привлекательный вариант, поищу еще опубликую здесь же
  6. Вывод views.
    Все просто: строите представление и в нашем файлике user-profile.tpl.php ставите его вывод таким образом:
    <?php
      print views_embed_view('UserBlog',$display_id='default',$account->name);
      ?>
    Первый параметр -- имя представления, второй -- имя вывода, третий -- аргумент самого представления.
     

Теперь все это ставим в нужные места, красиво оформляем стилями и, вуаля! Наш профиль пользователя готов, да здравствует Drupal

6.216
Ваша оценка: Нет Рейтинг: 6.2 (5 голосов)
Рекомендую
 #

Все здорово и просто, не надо никакие content_profiles или panels+Advanced Profile Kit устанавливать!

А вы могли бы подробней написать о возможности поиска земляков: у меня пишет "страница не найдена". Это нужно views создавать?

 
 #

Для того, чтобы работал поиск пользователя по полю, нужны две обязательные вещи: сделать поле публичным и заполнить заголовок страницы вывода с использованием токена %value.

 
 #

whellcome, спасибо за материал, он мне очень помог.