News:

SMF 2.1.4 has been released! Take it for a spin! Read more.

Main Menu

Tutorial | Creando nuevos campos de perfil

Started by MorderBR, July 11, 2013, 05:14:25 PM

Previous topic - Next topic

MorderBR

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


// 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í

// 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

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í


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:

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í

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:

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í:

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:

$memberContext[$user] = array(
'username' => $profile['member_name'],


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

Quedará algo así


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


Después en Sources/Profile-Modify.php

buscan

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


agregan después:

'nuevo_campo' => array(
        'type' => 'text',
'label' => $txt['nuevo_campo'],
'subtext' => $txt['nuevo_campo_sub'],
'size' => 24,
'permission' => 'profile_extra',
),


Buscan:

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í:

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

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



y reemplazar con:

// 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']

InetycL

Buen tutorial :D, me sirvio, pero como lo hago para mostrar el campo en el profile?.

MorderBR

#2
Quote from: InetycL on July 11, 2013, 06:57:12 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

<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

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

arkarium

wo excelente muy bueno lo usare en mi theme gracias  ;D

Advertisement: