Как создать блок, содержащий поля из профиля пользователя?


Я попытался использовать метод, описанный в одном из ответов здесь: Как поместить профиль пользователя в блок

Я создал блок и использовал следующий PHP-код в качестве теста; <?php render(user_view($account)); ?>

Это не сработало. Таким образом, остается вопрос, как вы можете создать блок и вызвать в него поля профиля пользователя с помощью PHP?

Author: Community, 2012-04-26

2 answers

render() возвращает только строку, она не выводит ее на вывод. Этот код должен работать:

<?php print render(user_view($account)); ?>

Предполагая, конечно, что вы загрузили объект $account. Если нет, вы, вероятно, захотите использовать что-то вроде:

global $user;
$account = user_load($user->uid);

Кроме того, использование фильтра PHP считается плохой практикой (он использует eval(), что является неотъемлемым риском для безопасности).

Лучший способ получить то, что вы ищете, - это написать небольшой пользовательский модуль, который реализует hook_block_info() и hook_block_view():

function MYMODULE_block_info() {
  return array(
    'user_profile' => array(
      'info' => 'User Profile Block',
      'cache' => DRUPAL_NO_CACHE
    )
  );
}

function MYMODULE_block_view($delta = '') {
  $block = array();

  if ($delta == 'user_profile') {
    global $user;
    $account = user_load($user->uid);
    $block['subject'] = 'User Profile';
    $block['content'] = user_view($account);
  }

  return $block;
}

Если вы новичок в написании модулей, лучшим ресурсом, о котором я знаю, является руководство разработчика модулей , и в частности подраздел Создание модулей Drupal 7.x; он проведет вас через все шаги, необходимые для запуска и запуска вашего модуля.

ОБНОВЛЕНИЕ

Просто чтобы ответить на ваш второй комментарий...

Я думаю, что самый простой способ отобразить только определенные поля - это установить Режимы просмотра сущностей модуль. Затем вы можете создать пользовательский режим просмотра для сущности пользователя (называемый block_profile или что-то в этом роде), и на странице администратора "Управление полями" для пользователей назначьте этому новому режиму просмотра только те поля, которые вы хотите отобразить.

Затем вы можете передать новый режим просмотра функции user_view():

$block['content'] = user_view($account, 'block_profile');

И вуаля, ваш блок будет содержать только поля, которые вы добавили в новый режим просмотра через пользовательский интерфейс администратора.

Если режимы просмотра объектов вызывают вы можете просто удалить его и добавить новый режим просмотра самостоятельно, используя hook_entity_info_alter() ( снова в вашем новом пользовательском модуле):

function MYMODULE_entity_info_alter(&$info) {
  $info['user']['view modes']['profile_block'] = array(
    'label' => t('Profile Block'), 
    'custom settings' => TRUE
  );
}
 5
Author: Clive, 2012-04-26 17:38:02

Вы можете распечатать профиль пользователя, используя:

<?php print render($user_profile); ?>

Вы можете получить конкретную информацию о пользователе с помощью

<?php print render($user_profile['user_picture']); ?> 
<?php print render($user_profile['summary']); ?>
 0
Author: Ajay Kotian, 2012-04-26 16:56:02