Добавлял я вчера с помощью модуля новую категорию в профиль пользователя. Через 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);
}
}
На том пока и остановился.