2016-02-29 4 views
0

У меня есть сайт с типом контента «Проекты», в котором есть поле «Менеджер проектов», которое берет пользователя. Есть ли хороший способ отобразить все проекты, для которых пользователь отображается в качестве Project Manager для этого проекта в профиле этого пользователя?Показать все узлы, для которых пользователь отображается как поле в профиле этого пользователя?

Update:

Вот то, что я до сих пор в user_profile.tpl.php

... 
function my_module_user_view($account, $view_mode, $langcode) { 

    $my_field = 'field_pm'; 
    $uid = $account->uid; // The uid of the user being viewed. 
    $query = "SELECT entity_id FROM {field_data_{$my_field}} WHERE {$my_field}_target_id = :uid AND bundle='user'"; 
    $args = array(':uid' => $uid,); 
    $result = db_query($query, $args); 
    $nids = $result->fetchCol(); 
    if (count($nids)) { 
    $projects = node_load_multiple($nids); // Load all projects where that user is a PM 
    foreach ($projects as $project) { 
     $account->content['field_pm_projects'][0]['#markup'] = $project->title; 
    } 
    } 
} 
?> 

<div class="profile"<?php print $attributes; ?>> 
<?php print render($user_profile); ?> 
<?php print $account->content['field_pm_projects']; ?></span> 
</div> 

ответ

0

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

global $user; 
    $query = new EntityFieldQuery(); 
    $result = $query->entityCondition('entity_type', 'node') 
      ->entityCondition('bundle', 'projects') 
      ->propertyCondition('status', 1) 
      ->propertyCondition('uid', $user->uid 
      ->fieldCondition('field_<YOUR_CUSTOM_FIELD>', '<COLUMN_NAME>', '<VALUE>', '=') 
      ->execute(); 

if (!empty($result['node'])) { 
    $nids = array_keys($result['node']); 
    $nodes = node_load_multiple(array_keys($result['node'])); 
} 

для получения дополнительной информации о EntityFieldQuery пожалуйста, пройдите по этой ссылке .. https://www.drupal.org/node/1343708

Надеется, что это будет решить ваш problem.GL

+0

Спасибо! Это сработало! Я бы просто добавил, что использование «global $ user» позволяет вам войти в систему, но назначить «$ user = user_load (arg (1))» будет пользователем текущего профиля пользователя. –

+0

Также есть хороший способ поиска нескольких полей (пользователь может быть pm или разработчиком ..) Спасибо! –

0

Вы можете легко достичь это с модулем Views, поэтому вам не нужно ничего кодировать. Создание узла Просмотр и фильтрация по полю Менеджер проекта, выбрав uid по ссылке. Поместите View на пользовательские страницы, и вы хорошо пойдете.