Студия разработки сайтов и приложений

Netspark.ru

Рукотворные категории профиля в Panels

Добавлял я вчера с помощью модуля новую категорию в профиль пользователя. Через hook_user(). Выглядит примерно так:


function mymodule_user($op, &$edit, &$account, $category = NULL) {
  switch ($op) {
    case 'categories' :
      $categories = array();
      $categories[] = array('name' => 'new_category',
                            'title' => t('New category'),
                            'weight' => 10,);
      return $categories;
    case 'load' :
      $account->field_1 = 1;
      $account->field_2 = 2;
      $account->field_3 = 3;
      break;
    case 'view' :
      $account->content['new_category'] = array(
        '#type' => 'user_profile_category',
        '#title' => t('New category'),
      );
      $account->content['new_category']['field_1'] = array(
        '#type' => 'user_profile_item',
        '#title' => t('Field 1'),
        '#value' => $account->field_1,
      );
      $account->content['new_category']['field_2'] = array(
        '#type' => 'user_profile_item',
        '#title' => t('Field 2),
        '#value' => $account->field_2,
      );
      $account->content['new_category']['field_3'] = array(
        '#type' => 'user_profile_item',
        '#title' => t('Field 3'),
        '#value' => $account->field_3,
      );
      break;
  }
} //function mymodule_user

Ну то есть добавляю три поля и они немедленно появляются в профиле каждого пользователя. Но вот незадача — популярный модуль Panels, который хорош в том числе и для создания красивых профилей пользователей, не умеет автоматически находить рукотворные категории пользователей и засасывать их в панели. Даже родную категорию 'History' (которая в коде называется 'summary') не хочет ни в какую показывать в списке доступных категорий.

В общем думал я, думал. Искал в интернетах и не нашел волшебного модуля, подсказывающего Panels список запрограммированных категорий. Создал тему на Друпал.ру — тоже пока нет результата. Единственное решение, которое я смог придумать — это кастом-панель, в которую выводится результат php-кода, формирующего категорию:

$uid = arg(1);
$user = user_load($uid);
$content = user_build_content($user);
foreach ($content['new_category'] as $item) {
  if ($item['#type'] == 'user_profile_item') {
    print theme('user_profile_item',$item);
  }
}

На том пока и остановился.

Комментарии