Всем привет!
Буду благодарен за помощь и идеи...
Есть форум, на котором выводится определённое значение поля из профиля(у автора темы и комментатора).
Вывожу так:
В 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 ?>: </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
Что я делаю не так?
Комментарии
Парни, буду рад помощи за вознаграждение, ничего не срабатывает
А почему именно 4 в $account->roles
$account->roles содержит ассоциативный массив $rid=>$role_name всех ролей, назначенных аккаунту.
проверяйте как:
<?php
if (in_array('your role', $account->roles)) {
...
}
?>
и все дела ..
Спасибо!
Пока не получилось, делаю так:
<?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()
Суть такая, что либо поле выводится, если на странице автор и комментаторы имеют все одну роль.
Как только автор ноды, или комментирует пользователь из другой роли, лезет ошибка EntityMalformedException: Отсутствует связующее свойство у сущности типа profile2. в функции entity_extract_ids() .
Или я неправильно проверяю, не пойму.. Всё делаю в файлах шаблона, comment.tpl и node.tpl, хотя вроде разницы не должно быть, поля-то выводятся!
Какова цена вопроса?, хочется уже решить, своими силами никак
План Б.
Создаем вьюху (или несколько):
Аргумент nid
Связь: автор материала
Фильтры: Если автор такой-якой
Поле: (Через Связь Автор материала). Поле из профиля.
Выводим эту вьюху через блок на странице ноды. Можно через Entity reference. Можно еще разными способами.
Field Permissions