Профиль пользователя через user-profile.tpl.php. Пример решения.

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

Аватар пользователя whellcome whellcome 6 июня 2009 в 22:20

К сожалению не нашел на сайте подробного руководства как использовать user-profile.tpl.php при создании профиля пользователя, поэтому, для таких же как я чайников начинающих пользователей Drupal подробно расписал что делать с примерами кодов со своего сайта и выложил там же Создание сайта на CMS Drupal. Профиль пользователя.
Пример того, что получилось можно посмотреть в моем профиле на вышеупомянутом сайте:
Профиль Whellcome.
Вкратце перечислю основные пункты того, что было реализовано:

  1. Вывод текстового поля.
  2. Вывод свободно заполняемого списка.
  3. Вывод многострочного текстового поля.
  4. Вывод URL.
  5. Вывод даты.
  6. Вывод views.

Комментарии

Аватар пользователя Raven Raven 5 сентября 2009 в 15:12

Возник следующий вопрос: генерируемые ссылки, например поля "Интересы", вместо поиска совпадений выдает 404. В чем причина?

Аватар пользователя -pax- -pax- 5 сентября 2009 в 20:30

"Raven" wrote:
Возник следующий вопрос: генерируемые ссылки, например поля "Интересы", вместо поиска совпадений выдает 404. В чем причина?

А у меня все работает как надо, большое спасибо автору темы.
Я вот такой профиль сегодня сделал у себя, там еще фотографии и альбомы - http://wildural.ru/user/3

Аватар пользователя Raven Raven 7 сентября 2009 в 22:50

Благодаря whellcome разобрался. Для корректной работы необходимо было задать полю в профайле в параметре "Видимость":
[х] Публичное поле. Данные будут показываться на странице профиля и на страницах списков пользователей.
+ Ввести заголовок страницы. (иначе не работает)

P.S. Доп. инфа в тему http://drupal.org/node/35728

Аватар пользователя Geldora Geldora 4 октября 2009 в 21:46

Djn почему я не люблю, когда хорошие материалы не дублируют на Др.ру!

Сайт ТС не отвечает!!! И посмотреть его статью не возможно...

Ни у кого копии не сохранилось?

Аватар пользователя Geldora Geldora 5 октября 2009 в 19:51

Спасибо за подсказку! (в гугле я искала, в яндексе не догадалась...)

Копирую сюда, надеюсь автор материала не будет против!

«Продвигаемся далее в покорении Друпала. Долго собирался с силами и наконец то сделал более-менее приличный профиль пользователя, пример можно посмотреть здесь : Профиль 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»

Аватар пользователя whellcome whellcome 15 февраля 2010 в 23:19

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

спасибо Geldora, ни разу не против Lol

-pax-, отличный профиль получился! Smile

Аватар пользователя volocuga volocuga 4 марта 2010 в 12:08

Так, а если поле не заполнено?

<?php
$pfieldname 
'profile_name';
if((
$account->$pfieldname) == '') {
print 
'<span class="profile-no-info">'t('No info yet').'</span>';
} else {
 print 
$account->$pfieldname;
}
?>

так правильнее Smile

Аватар пользователя iNFerNo iNFerNo 19 марта 2010 в 7:01

"-pax-" wrote:
А у меня все работает как надо, большое спасибо автору темы.

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

как теже города страны.

и как вывести

свободно заполняемый список (для пола человека использую)

и флажки ???

очень все еще актуально...

Аватар пользователя whellcome whellcome 19 марта 2010 в 9:23

"iNFerNo" wrote:
А у меня интересы не рабоатют как надо при клике не показывает аналогиченых пользователей с этими интересами

как теже города страны.


На сколько я помню? кто-то уже задавал вопрос. Сначала надо сделать поле публичным и определить заголовок вида: "пользователи которым интересно %value"

"iNFerNo" wrote:
и как выводить блог стрчоку гостевую...

историю, рейтинг... и другие вещи?


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

Аватар пользователя iNFerNo iNFerNo 19 марта 2010 в 9:42

"whellcome" wrote:
На сколько я помню? кто-то уже задавал вопрос. Сначала надо сделать поле публичным и определить заголовок вида: "пользователи которым интересно %value"

Так это понятно, но если не публично зачем интересы выводятся как ссылка. как это убрать?

Аватар пользователя whellcome whellcome 19 марта 2010 в 10:06

"iNFerNo" wrote:
А у меня интересы не рабоатют как надо при клике не показывает аналогиченых пользователей с этими интересами

"iNFerNo" wrote:
Так это понятно, но если не публично зачем интересы выводятся как ссылка. как это убрать?

А что значит "выводятся", сами что-ли? ;)) Сначала нужно выводить ссылкой, теперь не нужно...
Если нужен конкретный ответ, задай конкретный вопрос: требуемый результат, последовательность выполненных действий и пример своего кода. Тогда и будем посмотреть.
Можно в личку.

Аватар пользователя kovtunos kovtunos 3 декабря 2010 в 0:24

Quote:
5. Вывод даты
Не самый привлекательный вариант, поищу еще опубликую здесь же

Как можно красиво оформить вывод даты рождения?
Вместо 10.1.1976 что-то типа: 10 января 1976 г.
Есть варианты?

Аватар пользователя Petro Petro 13 декабря 2010 в 11:11

Вот проблема тут с выводом урл-а, то бишь сайта.
Вот этот код выводит урл

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

Но если юзер вводит урл без http:// например www.sayt.ru то по клику на него попадаем на страницу: http://мойсайт.ru/user/www.sayt.ru
Если с http:// то все нормально
Можно это полечить?

Аватар пользователя whellcome whellcome 13 декабря 2010 в 12:20

Ничего умнее в голову пока не пришло, но, по-моему, тут умнее и не надо:

<?php
$accurl
='http://'.str_replace('http://','',$account->profile_site);
$profield=check_url($accurl);
?>

Если что, старшие товарищи, надеюсь, поправят Smile

Аватар пользователя Petro Petro 14 декабря 2010 в 11:00

Работает, только появилась еще проблема: если нету сайта то раньше у меня не появлялась надпись сайт:, теперь появляется такая: Сайт: http://

Аватар пользователя Petro Petro 20 декабря 2010 в 18:36

Вывод многострочного текстового поля

 <?php if( $account->profile_treatment ):
        $profield= check_markup($account->profile_treatment); ?>
          <div class="treatment"> <?php print $profield ?> </div>
        <?php endif ?>

А как сделать, чтобы оно выводилось с изображениями? У меня в текст вставлены фотки, но выводится без них.

Аватар пользователя kpv_dnepr@drupal.org kpv_dnepr@drupal.org 14 января 2011 в 19:36

Люди добрые, подскажите, как сделать views? что бы он выводил материалы пользователя, в чем профиле сейчас находишься?

P.S. Я переделал views frontpage, он выводит материалы как на главной, а как отсортировать по пользователю?

Аватар пользователя baklanaft baklanaft 26 января 2011 в 5:13

Petro wrote:
Аргументы - Автор - Подставить аргумент по умолчанию - ID пользователя из URL

проблема
http://drupal.ru/node/56182
Не показывает содержание профиля если юзер не добавил материал
_
Пробовал вставить
print views_embed_view('UserBlog',$display_id='default',$account->name);
вообще не цепляет

Аватар пользователя whellcome whellcome 18 марта 2011 в 8:20

baklanaft wrote:
Petro wrote:
Аргументы - Автор - Подставить аргумент по умолчанию - ID пользователя из URL

проблема
http://drupal.ru/node/56182
Не показывает содержание профиля если юзер не добавил материал
_
Пробовал вставить
print views_embed_view('UserBlog',$display_id='default',$account->name);
вообще не цепляет

1. Профиль слишком уж привязан к вьювсу, поставь какую-то фразу при пустом выводе.
2. Здесь, вообще, аргумент - имя пользователя, а не ID, к тому же, не имея вьюхи перед глазами, трудно вообще о чем то говорить.

Аватар пользователя skepka skepka 16 мая 2011 в 20:24

"kovtunos" wrote:
Как можно красиво оформить вывод даты рождения?
Вместо 10.1.1976 что-то типа: 10 января 1976 г.
Есть варианты?

В template

<?phpfunction convert_profile_date($profile_date_ar)  {

       // takes a profile date array and converts it to a date variable.

    $output = mktime(0, 0, 0, $profile_date_ar['month'], $profile_date_ar['day'], $profile_date_ar['year']);
    return $output;

}?>

В user-profile.tpl <?php $converted_date convert_profile_date($account->profile_birthday); print date('j F, Y'$converted_date);?>
profile_birthday - название меняем на своё, 'j F, Y' - по вкусу.

Аватар пользователя iNFerNo iNFerNo 2 сентября 2011 в 14:40

для 7 ки все тоже самое... практически. да и зачем там это нужно... там же профиль из сскполей состоит...

Аватар пользователя vicshine vicshine 2 сентября 2011 в 16:12

"iNFerNo" wrote:
для 7 ки все тоже самое... практически. да и зачем там это нужно... там же профиль из сскполей состоит...

Сразу видно -> любитель стандартных тем и настроек "по-умолчанию" Lol

Вообщем, всё оказалось проще, чем казалось Wink разобрался сам.
Всё отлично написано на d.org по запросу user-profile.tpl.php Smile изменений дофига, примеры с D6 можно не смотреть вообще.

Аватар пользователя vicshine vicshine 2 сентября 2011 в 20:46

"iNFerNo" wrote:
ниодной темы не ставил стандартных смекаешь фанаатзер?

ОФФ:
Советую русский язык всё-таки выучить. Через "не могу" и через "не хочу". Или он у тебя не родной?
Всё сложнее становится тебя читать, чувак Smile