Список Друзей на странице пользователя (используя модуль Пользовательские взаимосвязи)

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

Аватар пользователя iNFerNo iNFerNo 26 июля 2011 в 10:28

Задача: вывести на странице профиля пользователя следующее (user-profile.tpl.php)

Друзья/Мои друзья: друг_1х, друг_2х, друг_3х
х - это удалить из друзей.

Общие друзья: друг_1, друг_2, друг_3 /при просмотре чужого профиля

Друзья в он-лайн: друг_1, друг_2, друг_3 / Либо выделять друзей каким-нить цветом или *

Новые друзья: друг_8, друг_9 / Вывод N последних добавленных друзей

Еще не добавленные в друзья пользователи: друг_10+, друг_11+, друг_12+
+ - добавить в друзья

после добавления/удаление друзей необходимо оставаться на той же странице.

+ при запросе в друзья убрать сообщение что кто-то подал запрос на дружбу, а заменить письмом в ЛС (оповещение, из которого также можно было бы добавить в друзья*).
*было бы удобно так, но не необязательно.

Комментарии

Аватар пользователя iNFerNo iNFerNo 26 июля 2011 в 14:24

А можно как то страницу вьюхи переопределить, что бы вместо удалить-ссылки вывести какой-нить знак или картинку? (а то удалить длинно и некрасиво как то)

Аватар пользователя iNFerNo iNFerNo 26 июля 2011 в 15:21
<?php
global $user ;

$rtid = 1 ; //Relationship type ID.

$max = 5 ; //The amount of users to show on the block.

$user_rel = db_query ( "

SELECT u.uid

FROM {users} u

LEFT JOIN {user_relationships} ur ON (u.uid = ur.requester_id OR u.uid = ur.requestee_id)

WHERE (ur.requester_id = %d OR ur.requestee_id = %d)

AND ur.approved = 1

AND ur.rtid = %d

AND u.status <> 0

GROUP BY u.uid

ORDER BY COUNT(ur.requester_id OR ur.requestee_id) DESC

" , $user -> uid , $user -> uid , $rtid );

$user_rel_com = array();

while ( $value = db_fetch_array ( $user_rel )) {

$user_rel_com [] = $value ;

}

//Exit if no users found.

if (empty( $user_rel_com )) {

return;

}

foreach ( $user_rel_com as $row ) {

$req_req_id_list .= " OR ur.requester_id = " . $row [ 'uid' ] . " OR ur.requestee_id = " . $row [ 'uid' ];

$no_include_friends .= " AND u.uid <> " . $row [ 'uid' ];

}

//Trim the first " OR ".

$req_req_id_list = drupal_substr ( $req_req_id_list , 4 );

//Get all of the current user's friends' friends and order by how many times they show up in the list.

$user_rel_rel = db_query ( "

SELECT u.uid

FROM {users} u

LEFT JOIN {user_relationships} ur ON (u.uid = ur.requester_id OR u.uid = ur.requestee_id)

WHERE (%s)

AND ur.approved = 1

AND ur.rtid = %d

AND u.uid <> %d

%s

AND u.status <> 0

GROUP BY u.uid

ORDER BY COUNT(ur.requester_id OR ur.requestee_id) DESC

" , $req_req_id_list , $rtid , $user -> uid , $no_include_friends );

$user_rel_rel_com = array();

while ( $value = db_fetch_array ( $user_rel_rel )) {

$user_rel_rel_com [] = $value [ 'uid' ];

}

//Scrambles the users non-randomly. Does not scramble the user at the bottom of the list.

$z = $user_rel_rel_com ;

$i = 0 ;

foreach ( $user_rel_rel_com as $v ) {

$r = rand ( 0 , 1 );

if ( $r === 1 && $user_rel_rel_com [ $i + 1 ]) {

$z [ $i ] = $user_rel_rel_com [ $i + 1 ];

$z [ $i + 1 ] = $v ;

}

$i ++;

}

if( count ( $user_rel_rel_com ) < $max ) {

$max = count ( $user_rel_rel_com );

echo '<span>' . t ( 'Sorry we have no suggestions' ) . '</span>' ;

}

for ( $i = 0 ; $i < $max ; $i ++) {

if ( $z [ $i ] != $user -> uid ) {

$account = user_load (array( 'uid' => $z [ $i ]));
$list [] = theme ( 'username' , $account ). ' ' . theme ( 'user_picture' , $account ) ;

}

}

//Theme with CSS as appropriate. "More" link is optional.

echo '<div class="uymn">' . theme ( 'item_list' , $list ) . '</div>' ;
//add link

$actions = _user_relationships_ui_actions_between ( $user , $account );

if ( count ( $actions )) {

print '<span class="URlinks">' . theme ( 'item_list' , $actions ) . '</div>' ;

}
?>

Аватар пользователя Lotar Lotar 26 июля 2011 в 16:51

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

Аватар пользователя Lotar Lotar 26 июля 2011 в 18:56

Ну если следовать логике вещей то тут через лефт джоин решается запрос. Делаем временную таблицу туда кидаем ИД текущего юзера и сюда же джоиним ИД юзеров у которых первый юзер в друзях.