помогите, знатоки друпала! (user-profile.tpl.php)

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

Аватар пользователя artem8 artem8 9 июня 2014 в 17:11

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

а суть вся в том, что не получается вывести отдельные поля в профиле (user-profile.tpl.php) поля созданны через profile2.
делал по аналогии с нодой, но "print render($user_profile['машинное_имя_поля']);" ничего не выводит. в ноде же подобная конструкция (print render($content['машинное_имя_поля']);) прекрасно работает.

в настройках, поля не скрыты и строка "print render($user_profile);" выводит их все но только в один столбец, а хочется разместить поля на странице равномерно.

что я делаю не так, и как вывести поля на странице профиля?

Комментарии

Аватар пользователя artem8 artem8 10 июня 2014 в 15:23

"ХулиGUN" wrote:
Вар_дамп массива в студию

а зачем он тебе? как вывести элемент массива по его индексам я знаю.
мне нужно средствами друпала вывести поля по их машинному имени, а не руками выбирать индексы из массива.

Аватар пользователя artem8 artem8 10 июня 2014 в 18:10

"ХулиGUN" wrote:
ну тогда так field_view_field()

и только? я же не где то еще, а на странице профиля, и в массиве $user_profile эти значения есть.
в ноде получалось просто render($content['машинное_имя_поля'])

Аватар пользователя artem8 artem8 10 июня 2014 в 18:18

"ХулиGUN" wrote:
http://habrahabr.ru/post/163501/[/quote]
как я понял, с помощью этой функции можно выводить поля из профиля в ноде. но мне надо поля профиля вывести в профиле, и хотелось бы более простой вариант, полей достаточно много.

Аватар пользователя artem8 artem8 10 июня 2014 в 18:43

"ХулиGUN" wrote:
Какие сложности?

у меня более 30-ти полей в профиле.
если надо вывести пару, тройку из них, то да, field_view_field() оптимальный вариант.

вернемся к началу. в ноде любое поле ноды можно вывести строчкой render($content['машинное_имя_поля']),
а в профиле не получается вывести любое поля профиля строчкой render($user_profile['машинное_имя_поля'])

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

Аватар пользователя artem8 artem8 20 июня 2014 в 22:23

походу я поторопился сказать спасибо этому методу 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 не учитывает настройки в отображении поля, в частности расположение метки и формат поля, даже если стоит что метка скрыта, а поле простой текст, выводит и метку и ссылку на словарь.

неужели нет нормального способа?

Аватар пользователя drupby drupby 20 июня 2014 в 22:55

"artem8" wrote:
для одного это
<?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']); ?>
и так далее.

если немного подумать, то отличаются они только uid юзера
print render($user_profile['profile_my-profile']['view']['profile2'][$user->uid]['field_example']);

Аватар пользователя artem8 artem8 20 июня 2014 в 23:39

"drupby" wrote:
если немного подумать, то отличаются они только uid юзера

нет, uid юзера и цифра в профиле не совпадают.

вообще цифра даже у одного юзера в разных профилях отличается.

Аватар пользователя artem8 artem8 20 июня 2014 в 23:38

"ХулиGUN" wrote:
А по хорошему счёту нужно изначально продумывать структуру проекта

что продумывать?
есть пользователь, он заполняет поля профиля. или чего, надо продумать как из 30-ти сделать два поля?

Аватар пользователя artem8 artem8 21 июня 2014 в 0:06

"ХулиGUN" wrote:
адеюсь Вы знакомы со структурой бд друпала, так что понимаете как доставать это всё из базы

как писать запросы я знаю, но вот с друпалом только знакомлюсь. вообще я думал, что друпал, вместе с многочисленными модулями это самодостаточная система.
"ХулиGUN" wrote:
Можно было бы реализовать полностью свою сущность

можно про это более детально?

Аватар пользователя drupby drupby 21 июня 2014 в 0:29

"artem8" wrote:
нет, uid юзера и цифра в профиле не совпадают.
вообще цифра даже у одного юзера в разных профилях отличается.

ну хорошо, тогда это pid юзера для конкретного профиля

$profile = profile2_load_by_user($uid, 'my-profile');
в $profile будет pid пользователя
print render($user_profile['profile_my-profile']['view']['profile2'][$profile->pid]['field_example']);

Аватар пользователя artem8 artem8 21 июня 2014 в 13:48

"drupby" wrote:
ну хорошо, тогда это pid юзера для конкретного профиля

это больше похоже на правду, в массиве $user_profile есть поле pid и значение совпадает.
только вот конструкция
"drupby" wrote:
$profile = profile2_load_by_user($uid, 'my-profile');
print render($user_profile['profile_my-profile']['view']['profile2'][$profile->pid]['field_example']);

не работает, выдает ошибку

    Notice: Undefined variable: uid в функции include() (строка 50 в файле Z:\home\localhost\www\drupal\sites\all\themes\business\templates\user-profile.tpl.php).
    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 запрятан глубоко в массиве

    [profile_profile2_main] => Array
        (
            [#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] => Профиль
Аватар пользователя drupby drupby 21 июня 2014 в 18:25

"artem8" wrote:
не работает, выдает ошибку

$profile = profile2_load_by_user($user->uid, 'my-profile');
print render($user_profile['profile_my-profile']['view']['profile2'][$profile->pid]['field_example']);