РЕШЕНО! Вывод ссылки добавить в друзья в кастомном профиле для модуля User Relationship

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

Аватар пользователя iNFerNo iNFerNo 27 апреля 2011 в 10:53

Год искал решение и кое как нашел доделал. Но он с косяками и кривое. Может кто-нибудь поможет довести до ума.

<?php
  
// check if friends code

    

$account user_load(array('uid' => $node->uid));
    
$owner $node->name;

    

$current_relationships user_relationships_load(array('between' => array($user->uidarg(1))), array('sort' => 'rtid'));
    
$rid $current_relationships['1']['0']->rid;

       
    

//if users are friends and relationship has been approved
    
     
if ($relationships user_relationships_load(array('between' => array($user->uid$uid),'approved' => 1))) {

            

// set a value of friends to 1 to allow content to be displayed below.
            
$friends 1;

 if (

$relationships user_relationships_load(array('between' => array($user->uid$uid),'approved' => 0))) {
            
// set a value of friends to 1 to allow content to be displayed below.
            
$friends 0;
   

       
        } elseif(

$user->uid != $uid) {

       
             print 

"<a href=/user/" $user->uid "/relationships/" $rid "/remove?destination=user/$uid/ class=\"user_relationships_popup_link\">".t('Remove ' $owner ' as Friend')." </a>";
         
              
$friends 1;

       
        } else {
           

                

$friends 0;
    }

        }

     elseif (

$user->uid != $uid) {
       
               
         
              
$friends 0;

 print 

"<a href=\"/relationship/$uid/request/1?destination=user/$uid\" class=\"user_relationships_popup_link\">".t('Add ' $owner ' as Friend')."</a>";       
       
        } else {
           

                

$friends 1;
    }

?>

На сайте добавлено одна взаимосвязь Друг.

1. При нахождении у себя в профиле ссылки о добавлении/удалении взаимосвязи ДРУГ нет.
2. В чужом профиле если юзер не добавлен выводиться ссылка добавить. При добавлении (без подтверждения) - ВСЕ ТАКЖЕ ССЫЛКА на добавление (КАК бы ее заменить на фразу типа- запрос на добавление в друзья отправлен (ссылка на страницу не подтвержденных друзей).
3. После подтверждения - появляется ссылка удалить.

Вопрос как допилить код что бы можно было использовать и другие взаимосвязи.

Комментарии

Аватар пользователя klimp klimp 10 мая 2011 в 13:36

Вот такой вариант подходит?

<?php

//$ownerGl - это объект пользователя, профиль которого мы в данный момент просматриваем

//Загружаем объект массив объектов связи текущего юзера и владельца профиля

$current_relationships user_relationships_load(array('between' => array($user->uid$ownerGl->uid)));
//Если связей будет несколько, т онужно будет переделать проверку не на первый элемент, а циклом!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$current_relationship_object array_shift($current_relationships);

//Объект связи есть
if(isset($current_relationship_object)){
    
//Проверяем подтверждена ли связь
    
if($current_relationship_object->approved == 1){
        echo 
'Это ваш друг<br />';
        print 
theme('user_relationships_remove_link'$user->uid$current_relationship_object->rid);
    }
    if(
$current_relationship_object->approved == 0){
        echo 
'Этот пользователь еще не подтвердил запрос на дружбу (выводим ссылку "отменить запрос")<br />';
        print 
theme('user_relationships_pending_request_cancel_link'$user->uid$current_relationship_object->rid);
    }
//Объекта связи нет
}else{
    
//Если связи между юзером и владельцем профиля нет и это разные пользователи, выводим ссылку добавления
    
if($user->uid != $ownerGl->uid){
        
$rel_type user_relationships_type_load(1);
        print 
theme('user_relationships_request_relationship_direct_link'$ownerGl$rel_type);
    }
}
?>

Я извиняюсь за "кривоту" кода. Сам только приступил к созданию кастомного профиля.
Если связей предусмотренно несколько, может работать неправильно (скорее всего и будет работать неправильно)
Вообще посмотрите inc-файл user_relationships_ui.theme модуля user_relationships. Он находится в /sites/all/modules/user_relationships/user_relationships_ui

Аватар пользователя iNFerNo iNFerNo 10 мая 2011 в 14:00

не не канает...

1. в своем профиле тоже есть
2. пишется просто Сделать Друг из... при клике зависает... аякс... ибо не известно что за друган...

Аватар пользователя klimp klimp 10 мая 2011 в 14:11

"iNFerNo" wrote:
1. в своем профиле тоже есть

Не понял, что вы имеете ввиду

"iNFerNo" wrote:
2. пишется просто Сделать Друг из... при клике зависает... аякс... ибо не известно что за друган...

Так происходит, потому что у вас не определена переменная $ownerGl, как раз таки она и отвечает на вопрос "что за друган?"

Назначал я ее примерно так при инициализации модуля. В моем случае профили кастомные пользователей располагаются по пути profile/1, profile/2, и.т.п. (profile/{uid})

<?php
/*
$ownerGl - владелец просматриваемого материала, профиля и т.д.
*/
global $ownerGl;

/*
 * Назначение владельца $ownerGl
 */
function law_profile_pages_init() {
    global 
$user;
    global 
$ownerGl;

    if(

arg(1) == '' || !ctype_digit(arg(1)) ) return $ownerGl user_load($user->uid);

    if(

arg(0) == 'node' ){
        
$current node_load(arg(1));
        return 
$ownerGl user_load($current->uid);
    }

    return 

$ownerGl user_load(arg(1));
}
?>
Аватар пользователя iNFerNo iNFerNo 10 мая 2011 в 14:25

не у меня кастомый профили располагаются как и все остальные... /users/никнейм

и куда эту функцию пихать???

---

не могли бы вы привести к нормальному виду мой код там все работает как надо. не выводит только фразу в ожидании подтверждения... и все.

Аватар пользователя klimp klimp 10 мая 2011 в 14:50

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

law_profile_pages_init() - это hook_init. Т.е. у вас она должна называться имя_вашего_модуля_init(). Мой модуль называется law_profile_pages, отсюда и название ф-и.
Вообще переменная $ownerGl сделана для удобства, чтобы постоянно не выцеплять аргументы из урла.

Код ваш поправлять я не буду, потому что по сути я вам привел то же самое, но не самостоятельно писал ссылки, а с помощью ф-й темизации модуля user_relationships.

Фразу (а точнее ссылку на отмену связи), когда юзер ожидает подтверждения выводит ф-я

<?php
theme
('user_relationships_pending_request_cancel_link'$user->uid$current_relationship_object->rid);
?>

$current_relationship_object->rid - айдишник неподтвержденной связи.