мои попытки поиска ни к чему не привили, нашел много материала, но найденный материал не помог решить мою проблему.
а суть вся в том, что не получается вывести отдельные поля в профиле (user-profile.tpl.php) поля созданны через profile2.
делал по аналогии с нодой, но "print render($user_profile['машинное_имя_поля']);" ничего не выводит. в ноде же подобная конструкция (print render($content['машинное_имя_поля']);) прекрасно работает.
в настройках, поля не скрыты и строка "print render($user_profile);" выводит их все но только в один столбец, а хочется разместить поля на странице равномерно.
что я делаю не так, и как вывести поля на странице профиля?
Комментарии
а зачем он тебе? как вывести элемент массива по его индексам я знаю.
мне нужно средствами друпала вывести поля по их машинному имени, а не руками выбирать индексы из массива.
и только? я же не где то еще, а на странице профиля, и в массиве $user_profile эти значения есть.
в ноде получалось просто render($content['машинное_имя_поля'])
https://drupal.org/node/1892772
у меня более 30-ти полей в профиле.
если надо вывести пару, тройку из них, то да, field_view_field() оптимальный вариант.
вернемся к началу. в ноде любое поле ноды можно вывести строчкой render($content['машинное_имя_поля']),
а в профиле не получается вывести любое поля профиля строчкой render($user_profile['машинное_имя_поля'])
мне как раз и нужно подобной строчкой выводить, а не нагружать одну страницу 30-ю функциями.
походу я поторопился сказать спасибо этому методу https://www.drupal.org/node/1892772
<?php print render($user_profile['profile_my-profile']['view']['profile2'][1]['field_example']); ?>
это работает только для одного пользователя.
когда создал для проверки еще нескольких пользователей, то оказалось, что вывод полей из их профилей отличается.
для одного это
<?php print render($user_profile['profile_my-profile']['view']['profile2'][5]['field_example']); ?>
для следующего уже
<?php print render($user_profile['profile_my-profile']['view']['profile2'][7]['field_example']); ?>
и так далее.
и функция
<?phpprint render(field_view_field('profile2', $profile['my-profile'],'field_example'));?>
не подходит. у меня 30 полей, и на отображение страницы тратится около 7 секунд.
к тому же field_view_field не учитывает настройки в отображении поля, в частности расположение метки и формат поля, даже если стоит что метка скрыта, а поле простой текст, выводит и метку и ссылку на словарь.
неужели нет нормального способа?
если немного подумать, то отличаются они только uid юзера
print render($user_profile['profile_my-profile']['view']['profile2'][$user->uid]['field_example']);
нет, uid юзера и цифра в профиле не совпадают.
вообще цифра даже у одного юзера в разных профилях отличается.
что продумывать?
есть пользователь, он заполняет поля профиля. или чего, надо продумать как из 30-ти сделать два поля?
как писать запросы я знаю, но вот с друпалом только знакомлюсь. вообще я думал, что друпал, вместе с многочисленными модулями это самодостаточная система.
можно про это более детально?
ну хорошо, тогда это pid юзера для конкретного профиля
$profile = profile2_load_by_user($uid, 'my-profile');
в $profile будет pid пользователя
print render($user_profile['profile_my-profile']['view']['profile2'][$profile->pid]['field_example']);
это больше похоже на правду, в массиве $user_profile есть поле pid и значение совпадает.
только вот конструкция
не работает, выдает ошибку
Notice: Trying to get property of non-object в функции include() (строка 51 в файле Z:\home\localhost\www\drupal\sites\all\themes\business\templates\user-profile.tpl.php).
а сам pid запрятан глубоко в массиве
(
[#type] => user_profile_category
[#title] => Профиль
[#prefix] => <a id="profile-profile2_main"></a>
[view] => Array
(
[profile2] => Array
(
[8] => Array
(
[#view_mode] => account
[field_profile2_sex] => Array
(
[#theme] => field
[#weight] => 4
[#title] => Пол
[#access] => 1
[#label_display] => hidden
[#view_mode] => account
[#language] => und
[#field_name] => field_profile2_sex
[#field_type] => taxonomy_term_reference
[#field_translatable] => 0
[#entity_type] => profile2
[#bundle] => profile2_main
[#object] => Profile Object
(
[pid] => 8
[type] => profile2_main
[label] => Профиль
print render($user_profile['profile_my-profile']['view']['profile2'][$profile->pid]['field_example']);