¡Bienvenido! ¿Aún no estás registrado?, deberás registrarte antes de poder usar el Chat, Comentar y Descargar en el Foro. Usa un email válido para la activación.
Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

TUTORIAL Mejorar la sección "Cuenta"
#1

6
Mejor respuesta del mensaje Mejorar la sección "Cuenta"Esto le va a gustar ya que vamos a simplificar un poco más lo que sería la sección de cuenta, y será bastante largo, y en mi caso le he quitado el porcentaje que se muestra en cuenta y varias opciones que ningún usuario se toma el tiempo en completar, como por ejemplo "Intereses y preferencias"

1 - En .htaccess buscamos 
RewriteRule ^cuenta.php$ inc/php/cuenta.php [QSA,L]

y debajo agregamos
RewriteRule ^cuenta/([A-Za-z0-9_-]+)$ inc/php/cuenta.php?accion=$1 [QSA,L]


2 - En tema/templates/t.cuenta.tpl y reemplazamos el contenido por esto
{include file='sections/main_header.tpl'}
<script src="{$tsConfig.js}/cuenta.js"></script>
<script>
   $(document).ready(() => {
      avatar.uid = '{$tsUser->uid}';
      avatar.current = '{$tsConfig.url}/files/avatar/{if $tsPerfil.p_avatar}{$tsPerfil.user_id}{else}avatar{/if}.jpg';
   });
</script>
<div class="tabbed-d">
   <div class="floatL">
      <div id="alerta_guarda"></div>
      <ul class="menu-tab">
         <li{if $tsAccion == ''} class="active"{/if}><a href="{$tsConfig.url}/cuenta/">Cuenta</a></li>
         <li{if $tsAccion == 'perfil'} class="active"{/if}><a href="{$tsConfig.url}/cuenta/perfil">Perfil</a></li>    
         <li{if $tsAccion == 'block'} class="active"{/if}><a href="{$tsConfig.url}/cuenta/block">Bloqueados</a></li>
         <li{if $tsAccion == 'clave'} class="active"{/if}><a href="{$tsConfig.url}/cuenta/clave">Cambiar Clave</a></li>
         <li{if $tsAccion == 'nick'} class="active"{/if}><a href="{$tsConfig.url}/cuenta/nick">Cambiar Nick</a></li>
         <li{if $tsAccion == 'config'} class="active"{/if}><a href="{$tsConfig.url}/cuenta/config">Privacidad</a></li>
      </ul>
      <a name="alert-cuenta"></a>
      <form class="horizontal" method="post" name="editarcuenta">
         <input type="hidden" name="pagina" value="{$tsAccion}">
         {include file="modules/m.cuenta_$tsAccion.tpl"}
      </form>
   </div>
   <div class="floatR">
       {include file='modules/m.cuenta_sidebar.tpl'}
   </div>
</div>
<div style="clear:both"></div>          
{include file='sections/main_footer.tpl'}


3 - Luego acceden a tema/templates/modules y buscan todos los m.cuenta_*.tpl y le quitan (al inicio del archivo)
style="display:none"

también (7 el numero puede variar, dependiendo de la sección)
<div class="alert-cuenta cuenta-7"></div>

y luego en los divs con la clase .buttons lo reemplazan por
<div class="buttons">
   <input type="button" value="Guardar" onclick="cuenta.guardar_datos()" class="mBtn btnOk">
</div>


4 - En inc/php/cuenta.php buscan
    } elseif($action == 'desactivate'){
        if(!empty($_POST['validar'])) echo $tsCuenta->desCuenta();
    

y debajo agregan
   $smarty->assign("tsAccion"$_GET["accion"]); 


5 - Luego inc/class/c.cuenta.php en la funcion "savePerfil()" cambian
$save $_POST['save']; 
por 
$save $_POST['pagina']; 

dentro del switch hacen lo siguiente, cambian el número por el nombre
 - case 1 -> case ''
 - case 2 -> case 'perfil'
 - case 6 -> case 'clave'
 - case 7 -> case 'config'
 - case 8 -> case 'nick'

luego eliminan estos
 - case 3: ...todo hasta el break... break;
 - case 4: ...todo hasta el break... break;
 - case 5: ...todo hasta el break... break;


más abajo buscamos y borramos
        // COMPROBAR PORCENTAJE
        $total = array(5,8,9,8,9); // CAMPOS EN CADA CATEGORIA
        $tid $save 1;
        if($save && $save 6){
            $total[$tid] = $this->getPorcentTotal($perfilData$total[$tid]);
            if($save == 1$total[$tid] = $total[$tid] - 2;
            $porcen db_exec('fetch_assoc'db_exec(array(__FILE____LINE__), 'query''SELECT p_total FROM u_perfil WHERE user_id = \''.$tsUser->uid.'\' LIMIT 1'));
            $porcen unserialize($porcen['p_total']);
            $porcen[$tid] = $total[$tid];
            $porcenNow $this->getPorcentVal($porcen);
            $porcen serialize($porcen);
            db_exec(array(__FILE____LINE__), 'query''UPDATE u_perfil SET p_total = \''.$porcen.'\' WHERE user_id = \''.$tsUser->uid.'\'');
        

justo debajo de eso seleccionan
        // ACTUALIZAR
        if($save == 1) {
            db_exec(array(__FILE____LINE__), 'query''UPDATE u_miembros SET user_email = \''.$tsCore->setSecure($perfilData['email'], true).'\' WHERE user_id = \''.$tsUser->uid.'\'');
            array_splice($perfilData01); // HACK
            $updates $tsCore->getIUP($perfilData'user_');
            if(!db_exec(array(__FILE____LINE__), 'query''UPDATE u_perfil SET '.$updates.' WHERE user_id = \''.$tsUser->uid.'\'')) return array('error' => show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.''db'));
        } else {
            $updates $tsCore->getIUP($perfilData'p_');
            if(!db_exec(array(__FILE____LINE__), 'query''UPDATE u_perfil SET '.$updates.' WHERE user_id = \''.$tsUser->uid.'\'')) return array('error' => show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.''db')); 
        
}
        //
        if(is_array($msg_return)) return $msg_return;
        else return array('porc' => $porcenNow); 

y lo reemplazan por
        // ACTUALIZAR
        if($save == '' or $save == 'perfil' or $save == 'config') {
            if($save == '') {
                db_exec([__FILE____LINE__], "query""UPDATE u_miembros SET user_email = '{$perfilData['email']}' WHERE user_id = " $tsUser->uid);    
                array_splice
($perfilData01);            
            
}
            $updates $tsCore->getIUP($perfilData, ($save == '' 'user_' 'p_'));
           $msg_return = (db_exec([__FILE____LINE__], "query""UPDATE u_perfil SET {$updates} WHERE user_id = " $tsUser->uid)) ? array("error" => "Los cambios fueron aceptados y ser&aacute;n aplicados.") : die(show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.''Base de datos'));
        }
        //
        return $msg_return


6 - Crean un archivo llamado ajax.cuenta.php en inc/php/ajax y agregan lo siguiente
<?php if ( ! defined('TS_HEADER')) exit('No se permite el acceso directo al script');

/**
 * Controlador AJAX
 *
 * @name    ajax.cuenta.php
 * @author  Miguel92
*/


$files = [
   'cuenta-guardar' => ['n' => 2'p' => ''],
];

// REDEFINIR VARIABLES
$tsPage 'ajax/p.cuenta.'.$files[$action]['p'];
$tsLevel $files[$action]['n'];
$tsAjax = empty($files[$action]['p']) ? 0;

// DEPENDE EL NIVEL
$tsLevelMsg $tsCore->setLevel($tsLeveltrue);
if(
$tsLevelMsg != 1):
    echo '0: '.$tsLevelMsg['mensaje']; 
    die
();
endif;

// CLASE
require("../class/c.cuenta.php");
$tsCuenta = new tsCuenta();

// CODIGO
switch($action){
    case 'cuenta-guardar':
        echo json_encode($tsCuenta->savePerfil());
    break;



7 - En tema/templates/modules/m.cuenta_cuenta.tpl lo renombran a m.cuenta_.tpl

8 - En tema/templates/modules/m.cuenta_perfil.tpl y reemplazan el contenido por esto, y aplica este Debes agradecer para ver el contenido...
<div class="content-tabs perfil">
   <
fieldset>
      <
div class="field">
         <
label for="nombrez">Nombre completo</label>
         <
input type="text" value="{$tsPerfil.p_nombre}maxlength="60" name="nombrez" id="nombrez" class="text cuenta-save-2" style="width:230px">
      </
div>
      <
div class="field">
         <
label for="sitio">Mensaje Personal</label>
         <
textarea value="" maxlength="60" name="mensaje" id="mensaje" class="cuenta-save-2">{$tsPerfil.p_mensaje}</textarea>
      </
div>
      <
div class="field">
         <
label for="sitio">Sitio Web</label>
         <
input type="text" value="{$tsPerfil.p_sitio}maxlength="60" name="sitio" id="sitio" class="text cuenta-save-2" style="width:230px">
      </
div>
      <
div class="field">
         <
label for="red">Redes sociales</label>
         <
div style="display:grid;grid-template-columns: repeat(2, 1fr);gap: 10px;">
            {foreach 
$tsPerfil.redes key=name item=red}
               <
div style="display:flex;justify-content: flex-start;align-items: center;">
                  <
div class="icon">
                      <
img src="{$tsConfig.images}/icons/{$name}.png" width="16" height="16" />
                  </
div>
                  <
input type="text" class="text cuenta-save-2" value="{$tsPerfil.p_socials.$name}placeholder="{$red}name="red[{$name}]">
               </
div>
            {/foreach}
         </
div>
      </
div>
      <
div class="field">
          <
label>Me gustar&iacute;a</label>
          <
div class="input-fake">
              <
ul>
               {foreach 
from=$tsPData.gustos key=val item=text}
                  <
li><input type="checkbox" name="g_{$val}class="cuenta-save-2" value="1"{if $tsPerfil.p_gustos.$val == 1checked{/if}>{$text}</li>
               {/foreach}
            </
ul>
         </
div>
      </
div>
      <
div class="field">
         <
label for="estado">Estado Civil</label>
         <
div class="input-fake">
            <
select class="cuenta-save-2" name="estado" id="estado">
                  {foreach 
from=$tsPData.estado key=val item=text}
                  <
option value="{$val}"{if $tsPerfil.p_estado == $valselected{/if}>{$text}</option>
               {/foreach}
            </
select>
         </
div>
      </
div>
        <
div class="buttons">
           <
input type="button" value="Guardar" onclick="cuenta.guardar_datos()" class="mBtn btnOk">
        </
div>
   </
fieldset>
   <
div class="clearfix"></div>
</
div


9 - Ahora se viene lo genial, busca en tema/js/cuenta.js , justo antes que empieza var avatar = {
var cuenta = {... HASTA ... }

y lo reemplazas por
var cuenta = {
    alerta: (alerta) => {
        $(".alert-cuenta").show();
        $("#alerta_guarda").html(`<div style="background:#FFFFCC;text-align:center;margin-bottom: 10px;"><p style="display: block;font-size: 16px;padding: 10px 0;">${alerta}</p></div>`)
        window.scrollTo(0, 0)
        // Despues de 5s quitamos el alerta
        setTimeout(() => $("#alerta_guarda").html(''), 5000)
    },
    chgpais: () => {
        // Campo pais
        const pais = $("select[name=pais]").val();
        const estado = $("select[name=estado]");
        if(empty(pais)) estado.addClass('disabled').attr('disabled', 'disabled').val('');
        else {
            //Obtengo las estados
            $(estado).html('');
         $('#loading').fadeIn(250); 
         $.get(global_data.url + '/registro-geo.php', 'pais_code=' + pais, h => {
             if(h.charAt(0) === '1') estado.append(h.substring(3)).removeAttr('disabled').val('').focus();
             $('#loading').fadeOut(250); 
         })
      }
    },
    guardar_datos: () => {
        $('#loading').slideDown(250);
        $.ajax({
            type: 'post', 
            url: global_data.url + '/cuenta-guardar.php', 
            data: $("form[name=editarcuenta]").serialize(), 
            dataType: 'json',
            success: response => cuenta.alerta(response.error)
        });
    }
}

Eso sería todo, espero no olvidarme de ningún paso.
Responder
#2

4
Registrate o inicia tu sesión para ver este contenido

Me queda así
Responder
#3

1
(04-15-2024, 06:08 AM)Krsh escribió: Debes agradecer para ver el contenido...Me queda así

Puede ser que no hayas aplicado lo del punto 8 
Debes agradecer para ver el contenido...
Responder
#4

1
(04-15-2024, 02:26 PM)Miguel92 escribió: Debes agradecer para ver el contenido...
(04-15-2024, 06:08 AM)Krsh escribió: Debes agradecer para ver el contenido...Me queda así

Puede ser que no hayas aplicado lo del punto 8 

Si lo instale, el problema sería del otro complemento entonces?
Responder


Compartir en:

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)