Advertisement:

Author Topic: Tutorial | Creando nuevos campos de perfil  (Read 3524 times)

Offline MorderBR

  • Jr. Member
  • **
  • Posts: 190
  • Gender: Male
  • Rayzero Subs
    • RayzeroFansub on Facebook
    • @morderbr on Twitter
    • Rayzero Subs
Tutorial | Creando nuevos campos de perfil
« on: July 11, 2013, 05:14:25 PM »
Bueno, hace no mucho alguien preguntó sobre el llamado de un campo de perfil en Display.template.php(Este tema)

Aquí les enseño como(prácticamente copié y pegué :v)

Primero se debe crear una nueva columna en la tabla {prefijo}members llamada por ejemplo "nuevo_campo"
Después en el archivo Load.php se modificará el array de user_info

Code: [Select]
// Set up the $user_info array.
$user_info += array(
'id' => $id_member,
'username' => $username,
'name' => isset($user_settings['real_name']) ? $user_settings['real_name'] : '',
...

Agregarán :       'nuevo_campo' => empty($user_settings['nuevo_campo']) ? 0 : $user_settings['nuevo_campo'],
y te quedará algo así
Code: [Select]
// Set up the $user_info array.
$user_info += array(
'id' => $id_member,
'username' => $username,
'name' => isset($user_settings['real_name']) ? $user_settings['real_name'] : '',
                'nuevo_campo' => empty($user_settings['nuevo_campo']) ? 0 : $user_settings['nuevo_campo'],
...
no olviden las comillas y comas para que no marque error
Después buscar esta parte
Code: [Select]
if ($set == 'normal')
{
$select_columns = '
IFNULL(lo.log_time, 0) AS is_online, IFNULL(a.id_attach, 0) AS id_attach, a.filename, a.attachment_type,
mem.signature, mem.personal_text, mem.location, mem.gender, mem.avatar, mem.id_member, mem.member_name,
mem.real_name, mem.email_address, mem.hide_email, mem.date_registered, mem.website_title, mem.website_url,
mem.birthdate, mem.member_ip, mem.member_ip2, mem.icq, mem.aim, mem.yim, mem.msn, mem.posts, mem.last_login,
mem.karma_good, mem.id_post_group, mem.karma_bad, mem.lngfile, mem.id_group, mem.time_offset, mem.show_online,
mem.buddy_list, mg.online_color AS
...

ahí están todas las columnas de la tabla members y otras que no sé cuales sean xd
Agregarán esto: mem.nuevo_campo separado por comas, ponganlo antes de mg.online_color para que no marque error
Quedará algo así

Code: [Select]
if ($set == 'normal')
{
$select_columns = '
IFNULL(lo.log_time, 0) AS is_online, IFNULL(a.id_attach, 0) AS id_attach, a.filename, a.attachment_type,
mem.signature, mem.personal_text, mem.location, mem.gender, mem.avatar, mem.id_member, mem.member_name,
mem.real_name, mem.email_address, mem.hide_email, mem.date_registered, mem.website_title, mem.website_url,
mem.birthdate, mem.member_ip, mem.member_ip2, mem.icq, mem.aim, mem.yim, mem.msn, mem.posts, mem.last_login,
mem.karma_good, mem.id_post_group, mem.karma_bad, mem.lngfile, mem.id_group, mem.time_offset, mem.show_online,
mem.buddy_list, mem.nuevo_campo, mg.online_color AS

Después un poco más abajo encontrarán esto:
Code: [Select]
elseif ($set == 'profile')
{
$select_columns = '
IFNULL(lo.log_time, 0) AS is_online, IFNULL(a.id_attach, 0) AS id_attach, a.filename, a.attachment_type,
mem.signature, mem.personal_text, mem.location, mem.gender, mem.avatar, mem.id_member, mem.member_name,
mem.real_name, mem.email_address, mem.hide_email, mem.date_registered, mem.website_title, mem.website_url,
mem.openid_uri, mem.birthdate, mem.icq, mem.aim, mem.yim, mem.msn, mem.posts, mem.last_login, mem.karma_good,
mem.karma_bad, mem.member_ip, mem.member_ip2, mem.lngfile, mem.id_group, mem.id_theme, mem.buddy_list,
mem.pm_ignore_list, mem.pm_email_notify, mem.pm_receive_from, mem.time_offset' . (!empty($modSettings['titlesEnable']) ? ', mem.usertitle' : '') . ',
mem.time_format, mem.secret_question, mem.is_activated, mem.additional_groups, mem.smiley_set, mem.show_online,
...

también agregarán mem.nuevo_campo

Quedará algo así
Code: [Select]
elseif ($set == 'profile')
{
$select_columns = '
IFNULL(lo.log_time, 0) AS is_online, IFNULL(a.id_attach, 0) AS id_attach, a.filename, a.attachment_type,
mem.signature, mem.personal_text, mem.location, mem.gender, mem.avatar, mem.id_member, mem.member_name,
mem.real_name, mem.email_address, mem.hide_email, mem.date_registered, mem.website_title, mem.website_url,
mem.openid_uri, mem.birthdate, mem.icq, mem.aim, mem.yim, mem.msn, mem.posts, mem.last_login, mem.karma_good,
mem.karma_bad, mem.member_ip, mem.member_ip2, mem.lngfile, mem.id_group, mem.id_theme, mem.buddy_list,
mem.pm_ignore_list, mem.pm_email_notify, mem.pm_receive_from, mem.time_offset' . (!empty($modSettings['titlesEnable']) ? ', mem.usertitle' : '') . ',
mem.time_format, mem.secret_question, mem.is_activated, mem.additional_groups, mem.smiley_set, mem.show_online,
mem.nuevo_campo,

después un poco más abajo encontrarán esto:
Code: [Select]
elseif ($set == 'minimal')
{
$select_columns = '
mem.id_member, mem.member_name, mem.real_name, mem.email_address, mem.hide_email, mem.date_registered,
mem.posts, mem.last_login, mem.member_ip, mem.member_ip2, mem.lngfile, mem.id_group';

igual agregarán mem.nuevo_campo

Quedará así:
Code: [Select]
elseif ($set == 'minimal')
{
$select_columns = '
mem.id_member, mem.member_name, mem.real_name, mem.email_address, mem.hide_email, mem.date_registered,
mem.posts, mem.last_login, mem.member_ip, mem.member_ip2, mem.lngfile, mem.id_group,mem.nuevo_campo';

luego modificarán el array de $memContext

buscar:
Code: [Select]
$memberContext[$user] = array(
'username' => $profile['member_name'],

y agregas 'nuevo_campo' => $profile['nuevo_campo'],

Quedará algo así

Code: [Select]
// What a monstrous array...
$memberContext[$user] = array(
'username' => $profile['member_name'],
                'nuevo_campo' => $profile['nuevo_campo'],

Después en Sources/Profile-Modify.php

buscan
Code: [Select]
'location' => array(
'type' => 'text',
'label' => $txt['location'],
'log_change' => true,
'size' => 50,
'permission' => 'profile_extra',
),

agregan después:
Code: [Select]
'nuevo_campo' => array(
        'type' => 'text',
'label' => $txt['nuevo_campo'],
'subtext' => $txt['nuevo_campo_sub'],
'size' => 24,
'permission' => 'profile_extra',
),

Buscan:
Code: [Select]
function forumProfile($memID)
{
global $context, $user_profile, $user_info, $txt, $modSettings;

loadThemeOptions($memID);
if (allowedTo(array('profile_extra_own', 'profile_extra_any')))
loadCustomFields($memID, 'forumprofile');

$context['sub_template'] = 'edit_options';
$context['page_desc'] = $txt['forumProfile_info'];

setupProfileContext(
array(
'avatar_choice', 'hr', 'personal_text', 'hr',
'bday1', 'location', 'gender'
....
y en el array() de setupProfileContext agregan separado por coma y entre comillas simples 'nuevo_campo'

Quedaría algo así:
Code: [Select]
function forumProfile($memID)
{
global $context, $user_profile, $user_info, $txt, $modSettings;

loadThemeOptions($memID);
if (allowedTo(array('profile_extra_own', 'profile_extra_any')))
loadCustomFields($memID, 'forumprofile');

$context['sub_template'] = 'edit_options';
$context['page_desc'] = $txt['forumProfile_info'];

setupProfileContext(
array(
'avatar_choice', 'hr', 'personal_text', 'hr',
'bday1', 'location', 'gender', 'hr','nuevo_campo'

....

Después en Themes/default/languages/Profile.{su_idioma}.php

agregan antes de ?>
$txt['nuevo_campo'] = 'texto del nuevo camp';
$txt['nuevo_campo_sub'] = 'Sub texto del nuevo campo';

no olviden nunca las comas y si tienen algún buen editor revisen que no tenga algún error de sintaxis y primero crean la columna nuevo_campo para que no tengan errores al momento de reemplazar los archivos, el nombre de la tabla lo especifican en las partes donde se meten los tres mem.nuevo_campo y row['nuevo_campo']
(mem.nuevo_campo = mem.tabla_de_nuevo_campo)

Si quieren llamar estos campos en cualquier parte de la página pueden usar $context['user']['nuevo_campo'] o $user_info['nuevo_campo']
Para meterlo en el display usen esto, por ejemplo meterlo después del mensaje personal

buscar
Code: [Select]
// Show their personal text?
if (!empty($settings['show_blurb']) && $message['member']['blurb'] != '')
echo '
<li class="margintop">', $message['member']['blurb'], '</li>';


y reemplazar con:
Code: [Select]
// Show their personal text?
if (!empty($settings['show_blurb']) && $message['member']['blurb'] != '')
echo '
<li class="margintop">', $message['member']['blurb'], '</li>';
                          //campo nuevo_campo
if ($message['member']['nuevo_campo'] != '')
echo '
<li class="margintop">', $message['member']['nuevo_campo'], '</li>';

o si quieren usarlo con las funciones de loadmemberdata y loadmembercontext

//globalizan la variable $memberContext
   global $memberContext, $user_info;

 $memCommID = $user_info['id'];

loadMemberData($memCommID);
loadMemberContext($memCommID);

//se llama al campo con $memberContext[$memCommID]['nuevo_campo']
« Last Edit: July 11, 2013, 05:28:08 PM by MorderBR »

Offline InetycL

  • Newbie
  • *
  • Posts: 5
Re: Tutorial | Creando nuevos campos de perfil
« Reply #1 on: July 11, 2013, 06:57:12 PM »
Buen tutorial :D, me sirvio, pero como lo hago para mostrar el campo en el profile?.

Offline MorderBR

  • Jr. Member
  • **
  • Posts: 190
  • Gender: Male
  • Rayzero Subs
    • RayzeroFansub on Facebook
    • @morderbr on Twitter
    • Rayzero Subs
Re: Tutorial | Creando nuevos campos de perfil
« Reply #2 on: July 11, 2013, 07:15:35 PM »
Buen tutorial :D, me sirvio, pero como lo hago para mostrar el campo en el profile?.

Ve a Themes/default/Profile.template.php y busca
Code: [Select]
<div id="detailedinfo">
<div class="windowbg2">
<span class="topslice"><span></span></span>
<div class="content">
<dl>';

if ($context['user']['is_owner'] || $context['user']['is_admin'])
echo '
<dt>', $txt['username'], ': </dt>
<dd>', $context['member']['username'], '</dd>';

Agregas después
Code: [Select]
if ($context['member']['nuevo_campo'] != '')
echo '
<dt>', $txt['nuevo_campo_perfil'],': </dt>
<dd>', $context['member']['nuevo_campo'], '</dd>';

y la variable $txt['nuevo_campo_perfil'] la metes en Profile.{tu_idioma}.php

$txt['nuevo_campo_perfil'] = 'Nuevo campo mostrado en perfil';

Puedes ponerlo en el lugar que quieras, solamente tienes que buscar donde ponerlo
« Last Edit: October 29, 2013, 12:39:30 AM by MorderBR »

Offline arkarium

  • Semi-Newbie
  • *
  • Posts: 10
Re: Tutorial | Creando nuevos campos de perfil
« Reply #3 on: August 12, 2013, 06:26:06 PM »
wo excelente muy bueno lo usare en mi theme gracias  ;D