Отображение rolereference, userreference в user-profile.tpl.php

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

Аватар пользователя otmoroz otmoroz 17 февраля 2011 в 11:52

Добрый день!
Если стоит задача оттемизировать страницу юзверя и отобразить в ней все материалы, в которых этот юзер указан, то можно создать свой user-profile.tpl.php, поставить модули cck (userreference) и rolereference, и оформить страницу пользователя так:

Создаем в папке темы user-profile.tpl.php
Заходим в "Темы оформления" и нажимаем кнопку "Сохранить" - так вы пересканируете файлы темы.

Выводим поля, которые вы сделали в модуле "Профиль", картинку и референсы
Мой .tpl.php:

<?php
<?//Темизированная страница пользователя с материалами, прикрепленными через userreference и rolereference?>
<div class="profile">
    <div style="float:right">
        <?php print $profile['user_picture'];?>
    <p><?php print $account->profile_lastname?>&nbsp<?php print $account->profile_name;?></p>
    </div>
<?php
// Вывести роли юзера, кроме стандартных (1-анонимум, 2-зарегестрированный пользователь)
//Вывести профиль пользователя (стандартный модуль profile)
foreach($account->roles as $k => $v)
if (
$k 2) {
print  
$v "<br>";
}
print 
'<h3> Страница пользователя '.$user->name.'</h3>';
?>
<div class='profile-table' style='float:left;'>
    <table border='1'>
        <tr>
            <td><strong>Почта</strong></td>
            <td><?php print $account->mail;?></td>
        </tr>
        <tr>
            <td><strong>ФИО</strong></td>
            <td>
                <?php 
                
print $account->profile_lastname;?>&nbsp<?php print $account->profile_name?>&nbsp
                <?php if (!empty($account->profile_secondname)) {
                    print 
$account->profile_secondname ;}
                
?>
            </td>
        </tr>
        <tr>
            <td><strong>Телефон</strong></td>
            <td><?php if (!empty($account->profile_shphone)) { print $account->profile_shphone; }?></td>
        </tr>
    </table>
</div>
<div style='clear:both;'></div>    

<?php
// Вывести userreference
print $profile['userreference'];
?>
<?php
//вывести rolereference
$query = ("SELECT node.nid, node.title FROM node, content_type_task, users_roles WHERE node.nid = content_type_task.nid AND content_type_task.field_filgroup_rid = users_roles.rid AND users_roles.uid = $account->uid");
$result mysql_query($query);
while (
$row mysql_fetch_array($result)) {
print 
"<a href='/bcs/content/task/$row[nid].htm'>$row[title]</a><br>";
}
?>
</div>

?>

Естественно вы можете все это изменить под себя и добавить-убрать выводы других полей.
Критика (обоснованная) приветствуется. В комментариях указаны кусочки кода, которыми я делал то или иное действие Smile

UPDATE: Сделал лучшее решение, через календарь задач. а в user-profile вывел views календаря на неделю. Есть у меня в блоге.

Комментарии

Аватар пользователя otmoroz otmoroz 18 февраля 2011 в 10:07

а вот это не будет нагружать сайт?


<?php
function user_roles($membersonly 0$permission 0) {
  
$roles = array();

  if (

$permission) {
    
$result db_query("SELECT r.* FROM {role} r INNER JOIN {permission} p ON r.rid = p.rid WHERE p.perm LIKE '%%%s%%' ORDER BY r.name"$permission);
  }
  else {
    
$result db_query('SELECT * FROM {role} ORDER BY name');
  }
  while (
$role db_fetch_object($result)) {
    if (!
$membersonly || ($membersonly && $role->rid != DRUPAL_ANONYMOUS_RID)) {
      
$roles[$role->rid] = $role->name;
    }
  }
  return 
$roles;
}
?>
Аватар пользователя otmoroz otmoroz 18 февраля 2011 в 10:26

работает


<?php
global $user;
foreach(
$user->roles as $k => $v)
if (
$k 2) {
print  
$v "<br>";
}
?>

остался последний вопрос:
в userreference, если выбрать юзера, нужно отобразить у него в профиле материал. Если выбрать в rolereference его роль, опять же нужно отобразить материал. Попробую views.

Аватар пользователя otmoroz otmoroz 18 февраля 2011 в 13:01

userreference:

<?php
print $profile['userreference'];
?>

правда выходит вся категория с референсом.

как составить запрос "выбрать rid роли, которая находится в поле field_filialgroup " которая делается cck rolereference?

Аватар пользователя otmoroz otmoroz 18 февраля 2011 в 13:38

-доктор! почему меня все игнорируют????
-следующий!
---------------------------------------
(К)раткое описание форума Drupal.ru

Аватар пользователя otmoroz otmoroz 18 февраля 2011 в 15:59

вот это:

SELECT title FROM node
WHERE nid=(SELECT nid FROM content_type_task
 WHERE field_filgroup_rid = ( SELECT rid FROM users_roles WHERE uid = $user->uid))

позволяет вывести только 1 материал, а если у роли больше одного материалов - выдает ошибку "значений больше, чем одно" как это пофиксить?

Аватар пользователя otmoroz otmoroz 21 февраля 2011 в 11:37

вот так:


<?php
// Вывести userreference
print $profile['userreference'];
//вывести rolereference
$query = ("SELECT node.nid, node.title FROM node, content_type_task, users_roles WHERE node.nid = 
content_type_task.nid AND content_type_task.field_filgroup_rid = users_roles.rid AND users_roles.uid = 
$user->uid");
$result mysql_query($query);
while (
$row mysql_fetch_array($result)) {
print 
"<a href='/bcs/content/task/$row[nid].htm'>$row[title]</a><br>";
}
?>
Аватар пользователя otmoroz otmoroz 21 февраля 2011 в 13:38

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

Аватар пользователя otmoroz otmoroz 21 февраля 2011 в 13:53

все! Если кто подскажет как разложить 'userreference' на части и сделать полную выборку нод (а не только заголовок) rolereference - буду очень благодарен