Вывод поля из профиля при условии, что это определённый тип профиля (роль)

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

Аватар пользователя Радосвет Радосвет 21 января 2016 в 11:26

Всем привет!
Буду благодарен за помощь и идеи...

Есть форум, на котором выводится определённое значение поля из профиля(у автора темы и комментатора).

Вывожу так:

В node.tpl.php

<?php$options = array(
  'type' => 'taxonomy_term_reference_plain',
  'label' => 'hidden',
);
$profile = profile2_load_by_user($node->uid) ; 
$numofholding = field_view_field( 'profile2' , $profile [ 'main' ] , 'field_numofholding', $options ) ;
print render($numofholding);?>

В field--field_numofholding.tpl.php

  <?php if (!$label_hidden): ?>
    <div class="divvv"><?php print $label ?>:&nbsp;</div>
  <?php endif; ?>

    <?php foreach ($items as $delta => $item): ?><i class="fa fa-home"></i>
      <?php print render($item); ?>
    <?php endforeach; ?>

main - это тип профиля, как правило, он соответствует определённой роли.

Поля нормально выводятся, если автор или комментатор имеет этот тип профиля main.
Если пишут юзеры другого типа профиля, вываливается ошибка:

EntityMalformedException: Отсутствует связующее свойство у сущности типа profile2. в функции entity_extract_ids() (строка 7879 в файле .../includes/common.inc).

Как я понял, нужно сделать условие, чтобы проверялось, к какому типу профиля (или хотя бы роли) относится юзер, и уже потом выводить поле.
Нужно определить именно роль того, кто постит ноду, а не роль посетителя страницы.

Вот такой код не срабатывает
<?phpif (isset($account->roles[4])):?>
Здесь у человека как-то вышло, у меня не выходит, http://www.drupal.ru/comment/500600#comment-500600 Sad

Что я делаю не так?

Комментарии

Аватар пользователя Formatix Formatix 7 февраля 2016 в 10:19

А почему именно 4 в $account->roles Wink

$account->roles содержит ассоциативный массив $rid=>$role_name всех ролей, назначенных аккаунту.
проверяйте как:

<?php
if (in_array('your role'$account->roles)) {
 ...
}
?>

и все дела ..

Аватар пользователя Радосвет Радосвет 7 февраля 2016 в 15:57

Спасибо!
Пока не получилось, делаю так:

<?php if (in_array('main'array_values($account->roles))) {
$options = array(
  
'type' => 'taxonomy_term_reference_plain',
  
'label' => 'hidden',
);

$profile profile2_load_by_user($node->uid) ; 
$numofholding field_view_field'profile2' $profile 'main' ] , 'field_numofholding'$options ) ;

print 

render($numofholding);
 }
?>

или так

<?php if (in_array('main'$account->roles)) {
$options = array(
  
'type' => 'taxonomy_term_reference_plain',
  
'label' => 'hidden',
);

$profile profile2_load_by_user($node->uid) ; 
$numofholding field_view_field'profile2' $profile 'main' ] , 'field_numofholding'$options ) ;

print 

render($numofholding);
 }
?>

и через темизацию поля

<?php if (in_array('main', $account->roles)): ?>
<?php foreach ($items as $delta => $item): ?>
<?php print render($item); ?>
<?php endforeach; ?>
<?php endif; ?>

Не выходит, поле не выводится вообще, да и с ошибкой in_array() expects parameter 2 to be array, string given в функции include() Sad

Суть такая, что либо поле выводится, если на странице автор и комментаторы имеют все одну роль.
Как только автор ноды, или комментирует пользователь из другой роли, лезет ошибка EntityMalformedException: Отсутствует связующее свойство у сущности типа profile2. в функции entity_extract_ids() .

Или я неправильно проверяю, не пойму.. Всё делаю в файлах шаблона, comment.tpl и node.tpl, хотя вроде разницы не должно быть, поля-то выводятся!

Аватар пользователя VasyOK VasyOK 22 февраля 2016 в 13:01

План Б.
Создаем вьюху (или несколько):
Аргумент nid
Связь: автор материала
Фильтры: Если автор такой-якой
Поле: (Через Связь Автор материала). Поле из профиля.

Выводим эту вьюху через блок на странице ноды. Можно через Entity reference. Можно еще разными способами.