¡Bienvenido a PHPost!

Para participar en el foro, descargar complementos y acceder al chat, es necesario tener una cuenta activa. Regístrate con un correo válido para completar la activación.

⚖️ Aviso Legal y Normas de Contenido

PHPost.es es una comunidad dedicada al soporte, desarrollo y difusión de software libre para la creación y administración de comunidades en línea.

Compromiso con la legalidad: No se permite la publicación, promoción o distribución de software pirateado, contenido warez ni material que infrinja derechos de autor o cualquier otra normativa aplicable.

Responsabilidad: Cada usuario es responsable del contenido alojado en su propio sitio web y del uso que haga del software. Los administradores y desarrolladores de Risus Nova no controlan ni supervisan los servidores o contenidos gestionados por terceros.

⚠️ Aviso de seguridad

Risus Nova se distribuye únicamente a través de phpost.es, que es la fuente oficial del proyecto donde publicamos las versiones verificadas.

Recomendamos no utilizar copias obtenidas desde sitios de terceros, ya que podrían haber sido modificadas y no contar con la integridad del código original, lo que puede suponer riesgos de seguridad en la instalación.

Para garantizar una instalación segura y actualizada, descarga siempre la versión oficial desde el botón disponible en esta página.

Importante: No pediremos donaciones en ningún momento ni en ninguna plataforma (Ko-fi, PayPal, redes sociales u otras). Si encuentras campañas de donación que utilicen el nombre de Risus Nova o PHPost, no tienen ninguna relación con el proyecto.

🔄 Desarrollo activo

Risus Nova forma parte de una nueva etapa del proyecto PHPost, en evolución constante con mejoras, correcciones y nuevas funciones. Puedes seguir el progreso y los cambios oficiales a través del changelog y la comunidad.

Risus Nova 2.1 Estable Desarrollo activo Última actualización: 12/07/2026 Ver Demo Changelog 261 Desarrollo del tema: 75% (fase actual de desarrollo) Descargar
Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

COMPLEMENTOS Subir avatar mejorado 12.04.24
#1

6
Mejor respuesta del mensaje Subir avatar mejorado 12.04.24En este caso se usará CDN para que sea mejor

1 - En tema/templates/modules/m.cuenta_sidebar.tpl y reemplazamos todo por esto
 
<div class="sidebar-tabs *****">
   <h3>Mi Avatar</h3>
   <div class="avatar-big-cont">
      <div style="display: none" class="avatar-loading"></div>
      <img width="120" height="120" alt="" src="{$tsConfig.url}/files/avatar/{if $tsPerfil.p_avatar}{$tsPerfil.user_id}_120{else}avatar{/if}.jpg?t={$smarty.now}" class="avatar-big" id="avatar-img"/>
   </div>
   <ul class="change-avatar" id="change">
      <li class="local-file" id="pc" style="width: 50%;text-align:center;"><span>Local</span></li>
      <li class="url-file" id="url" style="width: 50%;text-align:center;"><span>Url</span></li>
   </ul>
   <div class="clearfix"></div>
   <a href="javascript:avatar.subir()" class="avatar-next edit" >Editar</a>
</div>
<div class="clearfix"></div>
<link rel="stylesheet" href="Registrate o inicia tu sesión para ver este contenido@2.3.1/dist/croppr.min.css" integrity="sha256-Bbkel8+0sOmrvX75oDwNElgbmrAP+Pw+XXKKUwoKiVE=" crossorigin="anonymous">
<script src="Registrate o inicia tu sesión para ver este contenido@2.3.1/dist/croppr.min.js" integrity="sha256-VPADQYvd0gjLaeduvmP9/UZAdNW3D2sJieeJ3a3PX64=" crossorigin="anonymous"></script>

<script src="{$tsConfig.js}/subir-avatar.js?{$smarty.now}"></script>


2 - Creamos un archivo llamado "subir-avatar.js" y lo agregamos en tema/js 12.04.2024
const next = $(".avatar-next");
const sizeImg = 120;

function cambiarFile(){
   const input = $('#file-avatar')[0];
   if(input.files && input.files[0]) {
       let name_file = decodeURIComponent(input.files[0].name);
      document.querySelector(".drop-message").innerHTML = name_file;
      next.removeClass('btn-disabled')
   }   
}
$("#url-avatar").on('keyup', () => {
   if($("#url-avatar").val().length > 5) next.removeClass('btn-disabled')
})
$("#change > li, #change > li span").on('click', event => {
    const block = $("#change")
    block.attr('class', '')
    var tipo = event.target.textContent
    if(tipo === 'Local') {
        block.html(`<div id="drop-region">
         <input type="file" name="local" id="file-avatar" onchange="return cambiarFile();" class="browse"/>
         <div class="drop-message">
            Arrastra y suelta la imagen o haz clic para subir
         </div>
      </div>`)
    } else {
        block.html(`<div style="margin: 0 auto 10px auto;">
         <input type="text" name="url" autocomplete="off" id="url-avatar" placeholder="Url de la imagen" class="browse form-control"/>
      </div>`)
    }
})

var avatar = {
    size: 120,
    uid: false,
    key: false,
   ext: false,
    informacion: '',
    current: false,
    success: false,
    subir: async () => {
        $(".avatar-loading").show().css('display', 'flex');
        inputs = [].slice.call(document.querySelectorAll(".browse"))
        inputs.forEach(input => {
            const datoUrl = new FormData();
            datoUrl.append('url', (input.name == 'url') ? input.value : input.files[0])
            
            if(!empty(input.value)) {
                fetch(global_data.url + '/upload-avatar.php', {
                    method: 'POST',
                    body: datoUrl
                })
                .then(response => response.json())
                .then(blobData => {
                   avatar.subida_exitosa(blobData)
                });
            }
        })
    },
    subida_exitosa: rsp => {
        if (rsp.error == 'success') avatar.success = true;
        else if (rsp.msg) {
         avatar.key = rsp.key;
         avatar.ext = rsp.ext;
         avatar.cortar(rsp.msg);
        } else cuenta.enviar_alerta(rsp.error, 0);
        $(".avatar-loading").hide();
    },
    cortar: img => {
        img = img + '?t=' + new Date();
        mydialog.show(true);
        mydialog.title("Cortar avatar");
        mydialog.body(`<img class="avatar-cortar" src="${img}" />`);
        mydialog.buttons(true, true, 'Cortar', "avatar.guardar()", true, false, true, 'Cancelar', 'close', true, true);
        /*mydialog.buttons([
            {mostrar: true, texto: 'Cortar', accion: `avatar.guardar()`, activo: true}, 
            {mostrar: true, texto: 'Cancelar', accion: 'cerrar', activo: true}
        ]);*/
        mydialog.center();
        $("#avatar-img, #avatar-menu").attr("src", img).on('load', () => {
            let sizes = [avatar.size, avatar.size, 'px'];
            var croppr = new Croppr('.avatar-cortar', {
               aspectRatio: 1, // Mantemos el tamanio cuadrado 1:1
               startSize: sizes,
               minSize: sizes,  
                // Enviamos las coordenadas para cortar la imagen
                // Tiene la funcion onCropEnd ya que es como va a quedar
                onCropEnd: data => avatar.informacion = data,
               onCropMove: avatar.vistaPrevia
            });
        });
    },
    vistaPrevia: function (coords) {
        let rx = avatar.size / coords.width;
        let ry = avatar.size / coords.height;
        $('#avatar-img').css({
            width: Math.round(rx * coords.width) + 'px',
            height: Math.round(ry * coords.height) + 'px',
            marginLeft: '-' + Math.ceil(rx * coords.x) + 'px',
            marginTop: '-' + Math.round(ry * coords.y) + 'px'
        });
    },
    recargar: () => $("#avatar-img").attr("src", avatar.current + '?r' + new Date()),
    guardar: () => {
        if (empty(avatar.informacion)) 
            cuenta.enviar_alerta('Debes seleccionar una parte de la foto', 0);
        else {
            const coordenadas = new FormData();
            coordenadas.append('key', avatar.key)
            coordenadas.append('ext', avatar.ext)
            coordenadas.append('x', avatar.informacion.x)
            coordenadas.append('y', avatar.informacion.y)
            coordenadas.append('w', avatar.informacion.width)
            coordenadas.append('h', avatar.informacion.height)
            fetch(global_data.url + '/upload-crop.php', {
                method: 'POST',
                body: coordenadas
            })
            .then(response => response.json()) 
            .then(blobData => {
               if(blobData.error == "success") {
                   mydialog.body("Tu avatar se ha creado correctamente, ahora espera que recargue la p&aacute;gina");
                   mydialog.buttons(true, true, 'Aceptar', 'close', true, true, false);
                   $("#input_add").hide();
                   $(`input[name="url"]`).attr({
                        value: ''
                   })
               }
            });
        }
    }
}


3 - Luego en tema/js/cuenta.js buscar
 
var avatar = { .....

y borran todo hasta el final del archivo

4 - Luego van a inc/php/ajax.upload.php y lo reemplazan por esto
 
<?php if ( ! defined('TS_HEADER')) exit('No se permite el acceso directo al script');
/**
 * Controlador AJAX
 *
 * @name    ajax.upload.php
 * @author  PHPost Team
*/
/**********************************\

*    (VARIABLES POR DEFAULT)        *

\*********************************/

    // NIVELES DE ACCESO Y PLANTILLAS DE CADA ACCIÓN
    $files = array(
      'upload-avatar' => array('n' => 2'p' => ''),
      'upload-crop' => array('n' => 2'p' => ''),
        'upload-images' => array('n' => 2'p' => ''),
    );

/**********************************\

* (VARIABLES LOCALES ESTE ARCHIVO)    *

\*********************************/

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

/**********************************\

*    (INSTRUCCIONES DE CODIGO)        *

\*********************************/
    
    
// DEPENDE EL NIVEL
    $tsLevelMsg $tsCore->setLevel($tsLeveltrue);
    if($tsLevelMsg != 1) { echo '0: '.$tsLevelMsg['mensaje']; die();}
    // CLASE
    require('../class/c.upload.php');
    $tsUpload = new tsUpload();
    // CODIGO
    switch($action){
      case 'upload-avatar':
         // <--
         $tsUpload->image_scale true;
         $tsUpload->image_size['w'] = 640;
         $tsUpload->image_size['h'] = 480;
         //
         $tsUpload->file_url $_POST['url'];
         //
         $result $tsUpload->newUpload(3);
         echo json_encode($result);
         // -->
      break;
      case 'upload-crop':
         // <--
         echo json_encode($tsUpload->cropAvatar($tsUser->uid));
            // PARA EL PERFIL
            db_exec(array(__FILE____LINE__), 'query''UPDATE u_perfil SET p_avatar = 1 WHERE user_id = ' $tsUser->uid);
          // -->
      break;
        case 'upload-images':
         echo json_encode($tsUpload->newUpload(1));
        break;
    

Eso es todo...
Responder Compartir
#2

0
Gracias funciono bien, solo quedo muy abajo pero ya busco como subirlo. Muchas gracias
Responder Compartir
#3

0
(04-12-2024, 10:53 PM)Krsh escribió: Debes agradecer para ver el contenido...Gracias funciono bien, solo quedo muy abajo pero ya busco como subirlo. Muchas gracias

¿Puedes mandarme una captura de como queda?
Responder Compartir
#4

3
(04-14-2024, 12:06 PM)York0x escribió: Debes agradecer para ver el contenido...¿Puedes mandarme una captura de como queda?

De hecho ya lo tiene aplicado la demo de Syntaxis Lite
Registrate o inicia tu sesión para ver este contenido
Responder Compartir
#5

0
(04-14-2024, 01:43 PM)Miguel92 escribió: Debes agradecer para ver el contenido...
(04-14-2024, 12:06 PM)York0x escribió: Debes agradecer para ver el contenido...¿Puedes mandarme una captura de como queda?

De hecho ya lo tiene aplicado la demo de Syntaxis Lite

Muy bueno, y puedo poner otros avatares?
Responder Compartir
#6

0
(04-14-2024, 02:13 PM)York0x escribió: Debes agradecer para ver el contenido...Muy bueno, y puedo poner otros avatares?

Supongo que te refieres al 20 avatares que tiene para elegir... eso creo que lo tome de avatar aleatorio cuando se registra un usuario... luego lo modifique.
Responder Compartir


Compartir en:

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)