Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal
Miguel92

Mejorar la sección "Cuenta"

Recommended Posts

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?{$smarty.now}"></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 > 1 && $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($perfilData, 0, 1); // 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í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í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($perfilData, 0, 1);            
            }
            $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án aplicados.") : die(show_error('Error al ejecutar la consulta de la lí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']) ? 1 : 0;

// DEPENDE EL NIVEL
$tsLevelMsg = $tsCore->setLevel($tsLevel, true);
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 Redes sociales en perfil [Mejorado][Simplificado][Sugerencia]

<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í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 == 1} checked{/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.

  • Like 1

Share this post


Link to post
Share on other sites

  • Similar Content

    • By Miguel92
      Bueno como dice el titulo "Mostrar titulo de los posts Anterior y Siguiente v2", ya que este es una actualización mejorada!
       
      Topic de la v1
       
      Básicamente se puede realizar tranquilamente desde cero:
      1 - Buscan en inc/class/c.posts.php y van hasta la última llave }
      /* OBTENER LOS TITULOS DE LOS POSTS ANTERIOR/SIGUIENTE */ public function getTitles($from) { global $tsCore; $pid = (int)$_GET["post_id"]; $pid = $from ? $pid - 1 : $pid + 1; $opt = $from ? "<" : ">"; if($pid < 0) return false; // Post $sql = db_exec([__FILE__, __LINE__], "query", "SELECT post_id, post_title, c_seo FROM p_posts LEFT JOIN p_categorias ON post_category = cid WHERE post_id = {$pid}"); // Existe? if(db_exec('num_rows', $sql) === 0) { $sql = db_exec([__FILE__, __LINE__], "query", "SELECT post_id FROM p_posts WHERE post_id {$opt} {$pid} ORDER BY post_id DESC LIMIT 1"); } $data = db_exec('fetch_assoc', $sql); if(!empty($data)) { $data["post_title"] = $tsCore->setSEO($data["post_title"]); $data["post_url"] = "{$tsCore->settings["url"]}/posts/{$data["c_seo"]}/{$data["post_id"]}/{$data["post_title"]}.html"; } return !empty($data) ? $data : false; }  
      2 - En inc/php/posts.php buscan
                  $tsPages['autor'] = $tsPost['post_user']; y debajo agregan
                  $smarty->assign("tsAnterior", $tsPosts->getTitles(true));             $smarty->assign("tsSiguente", $tsPosts->getTitles(false));  
      3 - Luego buscan en tema/templates/modules/m.posts_content.tpl y buscan
      {if $tsPost.user_firma && $tsConfig.c_allow_firma} y arriba agregan (o donde deseen), obviamente ustedes lo tendrían que adaptar a su theme... Pero si usan bootstrap no tiene que hacer tantos cambios.
      <div class="post-antsig"> <div class="post-anterior"> <a href="{$tsAnterior.post_url}" class="d-flex justify-content-start align-items-center"> <div class="icon ml-2"> <!-- Acá puede ir un icono o imagen, deciden ustedes --> <i class="icon-angle-left"></i> </div> <div class="titulo"> <small class="text-uppercase">No te piedas</small> <span>{$tsAnterior.post_title|truncate:34}</span> </div> </a> </div> <div class="post-siguiente"> <a href="{$tsSiguente.post_url}" class="d-flex justify-content-end align-items-center t-end"> <div class="titulo"> <small class="text-uppercase">A continuación</small> <span>{$tsSiguente.post_title|truncate:34}</span> </div> <div class="icon mr-2"> <!-- Acá puede ir un icono o imagen, deciden ustedes --> <i class="icon-angle-right"></i> </div> </a> </div> </div> Así quedaría terminado!

    • By Miguel92
      Instalador automático de themes!
      Es completamente básico y no requiere de mucha instalación.
       
      1 - Abren header.php y al final agregan
      include TS_ROOT . "/inc/InstallAutomaticTheme.php";  
      2 - Descargan "InstallAutomaticTheme.php" y lo agregan en inc/
       
      y listo todos los themes que agregues en "themes" y que contengan el archivo "install.php" los va a instalar, primero comprobará si lo tienen instalado en caso que si lo tengan, no lo va a agregar otra vez.
    • By Miguel92
      Hola a todos, no se si les interesa, pero les dejó este mod!  (No sé si era la idea que tenía)
       
      Mod iniciado por: KMario19 
      Topic: [Desarrollo] BBCode file para archivos
       
      No lo he encontrado terminado, así que supongo que para usar este mod, deben tener:
      [SECCIÓN] Archivos V1.2
      [SECCIÓN] Archivos V2
       
      [SECCIÓN] Archivos v2.2 (Actualizado a 1.3) [ZIP]
      Topic: Sección archivos v2.2
       
      Iniciamos con la instalación
      1 - Buscamos en .htaccess y buscamos
      RewriteRule ^mod-history/([A-Za-z0-9_-]+)/ inc/php/mod-history.php?ver=$1 [QSA,L] debajo agregaremos
      # Descargar RewriteRule ^download/([0-9_-]+)$ inc/php/download.php?id=$1 [QSA,L]  
      2 - Luego vamos a inc/class/c.core.php y buscamos
      public function setMenciones($html) { arriba de la función (también puede ir arriba de la última })
      # Extraemos el nombre del archivo public function parseFiles($content) {     preg_match_all('/\[file\=(\d+)\]/i', $content, $files);     foreach ($files[0] as $id => $file) {         $dato = db_exec('fetch_assoc', db_exec([__FILE__, __LINE__], 'query', "SELECT file_id, f_nombre, f_descargas, f_ext FROM a_files WHERE file_id = {$files[1][$id]} LIMIT 1"));         if($dato["file_id"] > 0) {             $replace = "<a href=\"{$this->settings["url"]}/download/{$dato["file_id"]}\">{$dato["f_nombre"]}.{$dato["f_ext"]} <span style=\"color:#aaa\">{$dato["f_descargas"]} descargas</span>";         } else $replace = "<span style=\"color:#f00\">Archivo eliminado...</span>";         $content = str_replace($file, $replace, $content);     }     return $content; }  
      3 - Después buscamos en inc/class/c.posts.php 
      $postData['user_firma'] = $tsCore->parseBadWords($tsCore->parseBBCodeFirma($postData['user_firma']),true); arriba agregamos
      $postData['post_body'] = $tsCore->parsefiles($postData['post_body']);  
      4 - Subimos este archivo "download.php" en inc/php
       
      5 - Luego en tema/js/wysibb.js buscan
      smilebox: "Emoticonos", y debajo pegan
      file: "Descargar archivo",
      un poco más abajo buscan
      modal_link_title: "Insertar enlace", y arriba agregan
      modal_link_id: "Inserta el ID del archivo",
      luego buscan
      strike,sup,sub,| y a lado agregan
      ,file
      más abajo buscan
      img : { y arriba pegan (en buttonHTML lo pueden definir ustedes)
      file : {     title: CURLANG.file,     buttonHTML: '<span class="fa-solid fa-paperclip"></span>', // Pueden agregar imagen o lo que deseen     modal: {         title: CURLANG.modal_link_id,         width: "500px",         tabs: [             {                 input: [                     {param: "FILE",title:CURLANG.modal_link_id}                 ]             }         ]     },     transform : {         '<a href="{FILE}">{FILE}</a>':"[file={FILE}]"     } },  
      bueno, eso todo... espero no olvidarme de nada!
    • By Miguel92
      Actualizar a Smarty 4.0
       
      1 - Deben descargar la última versión de smarty del repositorio en github.
       
      2 - Luego van a inc/smarty y eliminan todo el contenido (Aviso, si tienen archivos agregados en plugins les recomiendo hacer una copia)
       
      3 - Abren el archivo descargado "smarty-master.zip", acceden a la carpeta que contiene y luego buscan la carpeta "libs" y extraen el contenido dentro de "inc/smarty"
       
      4 - Ahora vamos a la raíz de nuestro sitio y abrimos "header.php" y sigan los siguientes pasos:
        A Buscan  
      define('TS_FILES', TS_ROOT.'/files/');   y debajo agregamos
      define('TS_SMARTY', TS_ROOT.'/inc/smarty/'); B Arriba de "include 'config.inc.php';" agregan  
      # Definimos donde estan los temas   define('TS_THEMES', TS_ROOT . '/themes/');   # Definimos donde se estan los plugins adicionales   define('TS_PLUGINS', TS_EXTRA . 'plugins/');   # Tiempo de vida del cache antes de ser eliminado [5hs] (3600 equivale 1hs)   define('CACHE_LIFE_TIME', 3600 * 5);   define('CACHE_CHECKED', TRUE);   # Solo usar las carpetas agregadas en $smarty->setTemplateDir()   define('SECURITY', TRUE);   # Para comprimir el html y que sea más rápido   define('COMPRESS_HTML', FALSE);   C En inc/ext crean una carpeta llamada plugins y descargar plugins.zip y la descomprimen en "inc/ext"
           Contenido del comprimido zip: fecha, getUrl, hace, kmg, nl2br, quot, rtrim, seo, strlen, trim y ucfirst
        
        D Un poco más abajo buscamos y lo borramos 
      // Smarty   include TS_CLASS.'c.smarty.php';   E Más abajo buscamos
      // Smarty $smarty = new tsSmarty(); y reemplazamos por
        # Todas las instrucciones de smarty comienzan   include TS_ROOT . "/inc/smarty.config.php";   F Al no existir el archivo "smarty.config.php" lo crean dentro de "inc"
       
      5 - Ahora buscamos "/inc/smarty.config.php" y empezaremos la configuración.
        A - Abrimos la etiqueta de <?php y luego agregan estas instrucciones
       
      6 - Ahora vamos a la raíz de nuestro sitio y abrimos "footer.php":
        A - Borramos todo el contenido del archivo y la reemplazaremos con esto 
       
      PD: Se me olvido mencionar que deben ir a inc/php/ajax_files.php y borrar lo siguiente, ya que no lo usaremos
      $smarty->template_ts = false;   // SMARTY SETTINGS  
      NOTA:

      Como verán en el array $_ACCESO_TPL_PHP_ = [...items...], es el acceso a esas carpetas. ¿Por que incluí esto?, fácil es para simplificar más, antes para incluir un archivo se tenía que agregar de la siguiente manera
      {include file='sections/main_header.tpl'} pero como en este ejemplo, al estar la ruta de la carpeta "sections" en el array se puede usar así
      {include file='main_header.tpl'} sin tener que hacer referencia a la carpeta a la que se tenga que acceder, también se puede usar de la forma corta
      {include 'main_header.tpl'} En la parte que accede al tema, css, js e images es para el funcionamiento de los plugins que había realizado, si desean lo pueden borrar... A no ser que quieran el plugin al que llame phpost, ¿Cuál es su función?: Es agregar todos los css, js sin tener que escribir toda la ruta
      para acceder a dicho archivo y en caso de que este archivo no exista, no agregará nada(no va a ser una linea vacía)
      este sería un ejemplo:
      Agregará la fuente "Roboto" desde google y los estilos que estén mencionados en los parámetros
      y lo que que sería cache es como esto "archivo.css?{$smarty.now}", así cuando se hace un cambio
      lo apliquen los cambios
      {phpost fonts=["Roboto"]     css=[       "tema" => ["estilo.css", "css" => ["live.css", "wysibb.css", "$tsPage.css"]],       "cache" => true    ] ... ETC ... } Al tener la carpeta plugins dentro de inc/ext, puedes agregar más sin problemas
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Patrocinador



  • ×