И еще раз о виде персональной страницы пользователя

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

Аватар пользователя selff selff 21 января 2008 в 13:54

По следам заметки о профилях пользователей на друпал.ру
нашёл на сайте друпал.орг такое вот изящное решение по изменению внешнего вида указанной страницы.
Собственно в этой заметке я не пишу о сторонних модулях, я использую модуль имеющийся в ядре - Profile.
Моя задача: убрать со страницы профиля информацию о "Истории пользователя" (зачем она?) и видо-изменить заголовки других созданных мною полей.
Итак создаём в файле template.php следующую функуцию:
<?php

/**
* Catch the theme_user_profile function, and redirect through the template api
*/
function phptemplate_user_profile($user, $fields = array()) {
// Pass to phptemplate, including translating the parameters to an associative array. The element names are the names that the variables
// will be assigned within your template.
/* potential need for other code to extract field info */
return _phptemplate_callback('user_profile', array('user' => $user, 'fields' => $fields));
}

?>

и создаем в папке своей темы файл user_profile.tpl.php
а в нем выводим для себя содержимое массивов user и fields которое передается той самой нашей функцией,
чтобы знать какие данные нам доступны, а нам собственно доступны все данные, вот:

<div class="node">
    <div class="content">
   
    <h3>$USER:</h3>
    <?php foreach($user as $k=>$v)
        if (is_array($v)) foreach($v as $kk=>$vv) print "--$kk=$vv<br />\n";
        else print "$k=$v<br />\n";
        ?>

    <h3>$FIELDS:</h3>
    <?php foreach($fields as $k=>$v) {
        if (is_array($v)) {
            foreach($v as $kk=>$vv) {
                if (is_array($vv)) foreach($vv as $kkk=>$vvv) print "-- -- $kkk=$vvv<br />\n";
                else print "-- $kk=$vv<br />\n";
            }
        }
        else print "$k=$v<br />\n";
        }
        ?>

  </div>
</div>

ну а что дальше делать я думаю и так всем понятно.

Комментарии

Аватар пользователя Valeratal Valeratal 21 января 2008 в 16:27

а нельзя эту функцию вставить в user_profile.tpl.php
чего лишний раз нагружать template.php
ведь инфа нужна только на странице пользователя
или нет?

Аватар пользователя selff selff 21 января 2008 в 17:08

файл user_profile.tpl.php не будет виден системой до тех пор пока не будет
опредлена функция
function phptemplate_user_profile($user, $fields = array()) {
return _phptemplate_callback('user_profile', array('user' => $user, 'fields' => $fields));
}
насчет лишней нагрузки можно не беспокоиться, здесь она не ощутима.

Аватар пользователя Reno Reno 22 января 2008 в 8:42

У меня вопрос, начет первого камента, если у меня есть функция которая меняет контент в файле block-taxonomy_context.tpl.php то ее логичнее оставить в этой тплке, или все таки правильнее кинуть ее в темлейт пхп, просто я про нагрузку первый раз слышу Smile

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 22 января 2008 в 9:34

Функция phptemplate_user_profile перекрывает стандартную функцию, которая выводит стандартный набор полей для профиля. Т.е. phptemplate_user_profile как раз и "говорит" движку - для вывода профиля бери все из user_profile.tpl.php (или из файла с другим именем - см. _phptemplate_callback('user_profile') в функции.
Откуда иначе движок "узнает", какой файл шаблона использовать?
Прочитайте про "хуки" (hooks) и колбэки (callback) Drupal'а.

Аватар пользователя aksernar aksernar 4 декабря 2010 в 19:34

не знаю, зачем это нужно, но все действительно можно сделать легче через создание файла user profile tpl php и выбрать себе там чего нужно и не парить мозг))