Внимание! Этот пост описывает действительно грязный хак.
Лучше так не делать. Впрочем, на безрыбье и рак — рыба.
Добавление этой фишки произойдет в 3 этапа:
- Меняем таблицу
- Меняем форму форму настроек профиля
- Меняем страницу профиля
Дополнительные плюшки:
- Реальное имя с индексом в виде ника в списке пользователей вместо «простого» ника
- Выделение цветом пользователей, у которых сегодня Д.Р.
Итак, первым делом модифицируем таблицу с пользователями.
Для этого надо выполнить следующий sql-запрос (в пространстве бд движка):
ALTER TABLE `users`
ADD `about` text AFTER `name`,
ADD `site` varchar(255) AFTER `name`,
ADD `birth_date` DATE AFTER `name`,
ADD `real_name` varchar(255) AFTER `name`;
Теперь можно менять форму настроек профиля.
Для этого:
1. редактируем файл gears/user/index.php следующим образом:
Находим строки
$this->form->input('password', array('label'=>t('new_password'),'description'=>t('new_password_description'),
'validation'=>'min_length[5]','js_validation'=>'length[5,-1]','md5'=>TRUE,'via_cookies'=>TRUE,'ajax'=>array('name'=>t('!edit g
enerate'),'url'=>'/user/passgen/','where'=>'password.after','update'=>'password')))
->fieldset()
/* Добавлять сюда (в исходном коде ЭТОЙ строчки нету) */
->br();
И в указанное место добавляем код:
/* Start Field Section */
->title(t('!user_profile profile')) /* Добавляем новую вкладку */
->fieldset('profile') /* Открываем набор полей */
->input('real_name')
->input('site')
->calendar('birth_date')
->fieldset() /* Закрываем набор полей, не? */
->title(t('!user_profile about'))
->fieldset('about')
->editor('about')
->fieldset()
/* End Field Section */
2. редактируем файл gears/user/lang/ru.lng
В секцию [user] добавляем строки:
; Для дополнительных полей профиля
real_name = "Реальное имя"
real_name_description = "А как Вас по паспорту?"
site = "Личный сайт"
site_description = "Бложек, днявка или корпоративный портал..."
birth_date = "Дата рождения"
birth_date_description = "А Вам уже исполнилось 18?"
about = "Личная характеристика"
about_description = "Напишите немного о том, кто Вы такой"
В секцию [user_profile] добавляем строки:; Для дополнительных полей профиля
profile = "Профиль"
real_name = "Реальное имя"
site = "Личный сайт"
birth_date = "Дата рождения"
about = "О себе"
Хозяйке на заметку: Локализация и настройка календарика для элемента формы.
Открываем gears/form/js/calendar.js и редактируем следующим образом:
Было:
days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // days of the week starting at sunday direction: 0, // -1 past, 0 past + future, 1 future draggable: true, months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], navigation: 1, // 0 = no nav; 1 = single nav for month; 2 = dual nav for month and year offset: 0, // first day of the week: 0 = sunday, 1 = monday, etc..
Стало:
days: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'], // days of the week starting at sunday direction: 0, // -1 past, 0 past + future, 1 future draggable: true, months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'], navigation: 2, // 0 = no nav; 1 = single nav for month; 2 = dual nav for month and year offset: 1, // first day of the week: 0 = sunday, 1 = monday, etc..
И, наконец, изменяем саму страницу профиля:
Снова файл gears/user/index.php.
Находим строчки
d('user_profile');
/* Добавлять сюда (в исходном коде ЭТОЙ строчки нету) */
$item['type'] = 'line';
$item['left'] = t('register_date');
$item['right'] = df($user->reg_date);
И, соответственно добавляем:/* Start Field Section */
if (!is_null($user->real_name)){
$item['type'] = 'title';
$item['text'] ='<H1>'.$user->real_name.'</H1>';
$this->profile->add($item,-1);
}
if (!is_null($user->birth_date)){
$item['type'] = 'line';
$item['left'] = t('birth_date');
$item['right'] = df($user->birth_date,'%d %B %Y');
$this->profile->add($item);
}
if (!is_null($user->site)){
$item['type'] = 'line';
$item['left'] = t('site');
$item['right'] = $this->builder->a($user->site,l($user->site));
$this->profile->add($item);
}
if (!is_null($user->about)){
$item['type'] = 'line';
$item['left'] = t('about');
$item['right'] = $user->about;
$this->profile->add($item,99);
}
/* End Field Section */
А теперь — обещанные плюшки (-:
(ник в виде индекса рядом с полным именем и выделение цветом именинников)
Редактируем файл gears/users/index.php
После строчек
foreach($users as &$user){
$user['avatar'] = reset(make_icons($user['avatar']));
добавляем if (!is_null($user['real_name'])){
$user['name'] = $user['real_name'].'<sup>'.$user['name'].'</sup>';
}
для первой плюшки, и if (!is_null($user['birth_date']) && (date('m-d',strtotime($user['birth_date'])) == date('m-d'))) {
$user['name'] = '<font color=green>'.$user['name'].'</font>';
}
для второй.Пока все. С нетерпением жду комментариев.


suder, а может вы полигончик организуете демо-тестовый?
Это легко, но все равно надо бы обсудить как и что.
P.S.
Сейчас пытаюсь реализовать фишку, чтобы админ сообщества мог назначать других админов и модеров. По этому поводу статья нужна?
Любые материалы в рамках движка интересны будут всем.
А это будет достаточно скоро. ;-)
ОЧень будет полезна )))
Полностью потдерживаю!
Вот только не пойму, как можно доработать код, что бы при сохранении пустого поля ->editor('about') в базу записывался NULL автоматически?
if (!is_null($user->about)){можно заменить на что-то вроде
if (!(is_null($user->about) && $user->about=='' )){Это уточнение проверки (сохранить is_null требуется, поскольку если значение будет NULL, то php выведет ошибку о сравнение неприводимых типов, не?). Вообще, эта конструкция определяет, в каком случае выводить информацию. Еще можно проверять длину текста, etc.
A PHP Error was encountered
Severity: Notice
Message: Undefined property: stdClass::$real_name
Filename: user/index.php
Line Number: 154
code class=foreach($users as &$user){
$user['avatar'] = reset(make_icons($user['avatar']));>
Если точнее, там строчки:
$this->db->select('(SELECT COUNT(id) FROM nodes WHERE aid = users.id) as nodes_num, (SELECT COUNT(id) FROM comments WHERE aid = users.id) as comm_num, users.*'); $users = $this->db->order_by('id','asc')->get('users')->result_array(); foreach($users as &$user){ $user['avatar'] = reset(make_icons($user['avatar'])); } $header = array(После этого должно заработать.
а не gears/user/index.php?
Пишем свой сайт вот так
сохраняем… заходим в профиль, переходим на сайт.Анн нет. Мы переходим не по этой ссылке
а по этой
cuder как это исправить?можно заменить
$this->builder->a($user->site,l($user->site));на$this->builder->a($user->site,$user->site);но это не очень хорошая идея. приду домой, придумаю чего по-лучше. ;-)
$item['right'] = $this->builder->a($user->site,l($user->site));заменить на%s_trim=expand(':',$user->site);
if ($s_trim[0]='http'||$s_trim[0]='https'){ $item['right'] = $this->builder->a($user->site,l($user->site)); }else{ $item['right'] = $this->builder->a($user->site,l('http://'.$user->site)); }З.Ы. Код не проверял, но должно работать.
Сча придумаю что-нибудь по-лучше…