Добрый день!
Если стоит задача оттемизировать страницу юзверя и отобразить в ней все материалы, в которых этот юзер указан, то можно создать свой 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; ?> <?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;?> <?php print $account->profile_name; ?> 
<?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>
?>
Естественно вы можете все это изменить под себя и добавить-убрать выводы других полей.
Критика (обоснованная) приветствуется. В комментариях указаны кусочки кода, которыми я делал то или иное действие
UPDATE: Сделал лучшее решение, через календарь задач. а в user-profile вывел views календаря на неделю. Есть у меня в блоге.
Комментарии
или какой адрес вставить во views, чтобы подменить ссылкук на профиль юзера?
получается
<?php
print $user->name;
print $user->mail;
?>
а как сделать все это темизированное, с тегами?
C тегами
<?php print '<div class="class">' . $user->name . '</div>'; ?>
Спасибо! А как роли юзера выдрать? $user->roles?
а вот это не будет нагружать сайт?
<?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;
}
?>
работает
<?php
global $user;
foreach($user->roles as $k => $v)
if ($k > 2) {
print $v . "<br>";
}
?>
остался последний вопрос:
в userreference, если выбрать юзера, нужно отобразить у него в профиле материал. Если выбрать в rolereference его роль, опять же нужно отобразить материал. Попробую views.
views не фильтрует по rolereference ((
userreference:
<?php
print $profile['userreference'];
?>
правда выходит вся категория с референсом.
как составить запрос "выбрать rid роли, которая находится в поле field_filialgroup " которая делается cck rolereference?
-доктор! почему меня все игнорируют????
-следующий!
---------------------------------------
(К)раткое описание форума Drupal.ru
люди, помогите, плз, с sql запросом!
вот это:
WHERE nid=(SELECT nid FROM content_type_task
WHERE field_filgroup_rid = ( SELECT rid FROM users_roles WHERE uid = $user->uid))
позволяет вывести только 1 материал, а если у роли больше одного материалов - выдает ошибку "значений больше, чем одно" как это пофиксить?
люди! братья и сестры! что же вы делаете? Вы же братья и сестры!!!
в смысле, помогите, пожалуйста
вот так:
<?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>";
}
?>
камрады! образовалась проблема! в любом профиле отображаются роли и материалы того юзера, под каким я залогинился. Как получить uid из адреса профиля?
все! Если кто подскажет как разложить 'userreference' на части и сделать полную выборку нод (а не только заголовок) rolereference - буду очень благодарен
ух, никому не интересно оказываецца ((
arg(1)
$user->uid
Если в материале
*сарказм* спасибо, вовремя и по теме, а то что в теме решено, то это ладно