По следам заметки о профилях пользователей на друпал.ру
нашёл на сайте друпал.орг такое вот изящное решение по изменению внешнего вида указанной страницы.
Собственно в этой заметке я не пишу о сторонних модулях, я использую модуль имеющийся в ядре - 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="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>
ну а что дальше делать я думаю и так всем понятно.
Комментарии
а нельзя эту функцию вставить в user_profile.tpl.php
чего лишний раз нагружать template.php
ведь инфа нужна только на странице пользователя
или нет?
файл user_profile.tpl.php не будет виден системой до тех пор пока не будет
опредлена функция
function phptemplate_user_profile($user, $fields = array()) {
return _phptemplate_callback('user_profile', array('user' => $user, 'fields' => $fields));
}
насчет лишней нагрузки можно не беспокоиться, здесь она не ощутима.
У меня вопрос, начет первого камента, если у меня есть функция которая меняет контент в файле block-taxonomy_context.tpl.php то ее логичнее оставить в этой тплке, или все таки правильнее кинуть ее в темлейт пхп, просто я про нагрузку первый раз слышу
Функция phptemplate_user_profile перекрывает стандартную функцию, которая выводит стандартный набор полей для профиля. Т.е. phptemplate_user_profile как раз и "говорит" движку - для вывода профиля бери все из user_profile.tpl.php (или из файла с другим именем - см. _phptemplate_callback('user_profile') в функции.
Откуда иначе движок "узнает", какой файл шаблона использовать?
Прочитайте про "хуки" (hooks) и колбэки (callback) Drupal'а.
для 6'ой версии phptemplate_user_profile не нужна просто создаем файл user_profile.tpl.php и друпал его увидит
не знаю, зачем это нужно, но все действительно можно сделать легче через создание файла user profile tpl php и выбрать себе там чего нужно и не парить мозг))