¡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 Control de imágenes [cat, med, ran] desde la administración v.1.0
#1

9
Mejor respuesta del mensaje Control de imágenes [cat, med, ran] desde la administración v.1.0Bueno lo que trate de hacer es simplificar un poco, quieres agregar una imagen a "rangos", "categorías" o "medallas" y no quieres entrar desde el FTP o CPanel, bueno con esta herramienta deberías poder realizar esta tarea desde la administración de tu sitio.

Les mostraré algunas imágenes, pero no esta realizado con el default, si no que es una versión que estoy realizando.
[img]Registrate o inicia tu sesión para ver este contenido[/img]
[img]Registrate o inicia tu sesión para ver este contenido[/img]
[img]Registrate o inicia tu sesión para ver este contenido[/img]

Bueno comenzamos...
1 - En inc/class/c.admin.php lo pueden agregar al final o donde quieran.
 
# Obtenemos todas las imagenes de la carpeta
   
public function obtener_paquete($dir) {
      global 
$tsCore$smarty;
      
# Aplicamos los permisos si no los tiene
      
foreach (["cat""med""ran"] as $carpetachmod($smarty->template_dir["images"] . 'icons/' $carpeta0777);
      
# Creamos un arreglo
      
$data = [];
      
# Buscamos en la carpeta...
      
$carpeta $smarty->template_dir["images"] . 'icons/' $dir;
      
$imagenes opendir$carpeta );
      
# Recorremos la carpeta
      
while ($icono readdir($imagenes)) {
         if(
$icono != '.' && $icono != '..'):
            
# Obtenemos información del archivo
            
$inf getimagesize($carpeta '/' $icono);
            
$arr = [
               
"hash" => substr(md5(explode('.'$icono)[0]), 06),
               
"icon" => explode('.'$icono)[0],
               
"url" => $tsCore->settings["images"] . '/icons/' $dir '/' .$icono,
               
"width" => $inf[0],
               
"height" => $inf[1],
               
"type" => $inf["mime"]
            ];
            if(isset(
$_GET["size"]) or isset($_GET["type"])) {
               if(
intval($_GET["size"]) === $inf[0] or 'image/'.$_GET["type"] === $inf["mime"]) {
                  
array_push($data$arr);
               }
            } else 
array_push($data$arr);
         endif;
      }
      
closedir$imagenes );
      
# Retornamos el arreglo
      
return $data;
   }
   public function 
eliminar_icono_paquete() {
      global 
$tsCore$smarty;
      
# Buscamos en la carpeta...
      
$carpeta $smarty->template_dir["images"] . 'icons/' $tsCore->setSecure($_POST["path"]);
      
# Eliminamos si son la misma imagen con difente tamaño
      
foreach($this->obtener_paquete($_POST["path"]) as $eliminar) {
         if(
$eliminar["hash"] === $_POST["hash"]) {
            if(
$_POST["path"] === 'med') {
               
$sizes = [1632];
               foreach (
$sizes as $size) {
                  
$nimg "{$eliminar["icon"]}_{$size}." substr($eliminar["type"], 6);
                  
unlink($carpeta '/' .  $nimg);
               }
               return 
true;
            } else {
               
$nimg "{$carpeta}/{$eliminar["icon"]}." substr($eliminar["type"], 6);
               return (
unlink($nimg)) ? true false;
            }
         }
      }
   }
   public function 
subir_icono() {
      global 
$smarty;
      
# Mover a...
      
$mover $smarty->template_dir["images"] . 'icons/' $_POST["path"] . DIRECTORY_SEPARATOR;
      
//
      
if (($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/gif")) {
         
# Agregamos la imagen, si existe, esta será reemplazada por la nueva         
         
return (move_uploaded_file($_FILES["file"]["tmp_name"], $mover $_FILES['file']['name'])) ? '1: Imagen agregada correctamente...' '0: No se pudo subir la imagen!';
      } else return 
false;
   } 

Este código es para Smarty 4, si no lo tienes actualizado, lo que debes hacer es lo siguiente, buscas esto
 
$smarty->template_dir["images"] . 'icons/' 

y lo reemplazas por
 
TS_ROOT '/themes/' $tsCore->settings["tema"]['t_path'] . '/images/icons/' 

y borrar el de las funciones, excepto el que lleva $tsCore, allí solo eliminas $smarty
 
global $smarty


2 - En inc/php/admin.php buscan
 
} elseif($action == 'creditos'){ 

y arriba agregan
 
# PACKS 
} elseif($action == 'packs') {
    
$smarty->assign('tsDir'$_GET["path"]);
    if(
$act === 'abrir') {
        
$smarty->assign('tsPack'$tsAdmin->obtener_paquete($_GET["path"]));
    } 


3 - En inc/php/ajax/ajax.admin.php buscan
 
'admin-badwords-delete' => array('n' => 4'p' => ''), 

y debajo pegan
 
'admin-eliminar-icono' => array('n' => 4'p' => ''),
'admin-subir-icono' => array('n' => 4'p' => ''), 

más abajo
 
default:
       die(
'0: Este archivo no existe.');
      break; 

arriba agregan
 
        case 'admin-eliminar-icono':
            echo 
$tsAdmin->eliminar_icono_paquete();
        break;
        case 
'admin-subir-icono':
            echo 
$tsAdmin->subir_icono();
        break; 


4 - En tema/templates/admin_mods/ crean un archivo llamado "m.admin_packs.tpl" y dentro agregan, les recuerdo que lo pueden adaptar a su theme
 
<div class="boxy-title">
   <h3>Control de paquetes de imagenes</h3>
</div>
<div id="res" class="boxy-content">
    <p class="alerts ok">Desde aqu&iacute; podrás ver, agregar, eliminar las imagenes e iconos que estan guardados en "<a href="{$tsConfig.url}/admin/packs?act=abrir&path=ran">ran</a>", "<a href="{$tsConfig.url}/admin/packs?act=abrir&path=med">med</a>", "<a href="{$tsConfig.url}/admin/packs?act=abrir&path=cat">cat</a>".</p>
   {if $tsSave}<div class="alerts ok">Tus cambios han sido guardados.</div>{/if}
   <hr class="separator">
   {if $tsAct === ''}
       <div style="display:grid;gap:10px;grid-template-columns: repeat(3, 1fr);">
           <a href="{$tsConfig.url}/admin/packs?act=abrir&path=cat" class="block text-center">
               <img width="140" height="140" src="{$tsConfig.images}/category.svg" alt="Categor&iacute;as">
               <strong style="margin-top:4px;display: block;">Categor&iacute;as</strong>
           </a>
           <a href="{$tsConfig.url}/admin/packs?act=abrir&path=med" class="block text-center">
               <img width="140" height="140" src="{$tsConfig.images}/award.svg" alt="Medallas">
               <strong style="margin-top:4px;display: block;">Medallas</strong>
           </a>
           <a href="{$tsConfig.url}/admin/packs?act=abrir&path=ran" class="block text-center">
               <img width="140" height="140" src="{$tsConfig.images}/ran.svg" alt="Rangos">
               <strong style="margin-top:4px;display: block;">Rangos</strong>
           </a>
       </div>
   {elseif $tsAct === 'abrir'}
       {if $tsDir === 'med' || $tsDir === 'ran'}
           <span>Filtros:</span>
           {if $tsDir === 'med'}
               <a href="{$tsConfig.url}/admin/packs?act=abrir&path=med" style="text-align:center;">Todos</a> -
               <a href="{$tsConfig.url}/admin/packs?act=abrir&path=med&size=16" style="text-align:center;">16x16</a> -
               <a href="{$tsConfig.url}/admin/packs?act=abrir&path=med&size=32" style="text-align:center;">32x32</a>
           {/if}
           {if $tsDir === 'ran'}
               <a href="{$tsConfig.url}/admin/packs?act=abrir&path=ran" style="text-align:center;">Todos</a> -
               <a href="{$tsConfig.url}/admin/packs?act=abrir&path=ran&type=gif" style="text-align:center;">GIF</a> -
               <a href="{$tsConfig.url}/admin/packs?act=abrir&path=ran&type=png" style="text-align:center;">PNG</a>
           {/if}
       {/if}
       <table class="admin_table">
           <thead>
               <tr>
                   <th>Icono</th>
                   <th>Nombre</th>
                   <th>Dimensiones</th>
                   <th>Tipo</th>
                   <th>Acciones</th>
               </tr>
           </thead>
           {foreach $tsPack item=ic}
               <tr class="{$ic.hash}">
                   <td style="text-align:center;"><img src="{$ic.url}" alt="{$ic.icon}"></td>
                   <td style="width: max-content">{$ic.icon}</td>
                   <td>{$ic.width}x{$ic.height}</td>
                   <td>{$ic.type}</td>
                   <td class="admin_actions flex jcsaround aicenter">
                  <a href="javascript:packs.borrar('{$tsDir}', '{$ic.hash}')" title="Eliminar"><i class="fas fa-trash"></i></a>
               </td>
               </tr>
           {/foreach}
       </table>
       <hr class="separator">
       <div style="text-align:center;">
           <a href="{$tsConfig.url}/admin/packs?act=agregar&path={$tsDir}" class="mBtn">Agregar icono en {$tsDir}</a>
       </div>
      {elseif $tsAct === 'agregar'}
        
          <form method="post" enctype="multipart/form-data">
              <input type="hidden" name="path" id="path" value="{$tsDir}">
          <div class="form-line">
                <label for="image">Sube una imagen...</label>
             <input type="file" class="form-control-file" name="image" id="image">
          </div>
              <p><a href="javascript:packs.subir()" class="mBtn btnOk">Agregar</a></p>
       </form>

   {/if}
</div>


5 - En tema/templates/admin_mods/m.admin_sidemenu.tpl buscan
 
<li id="a_badwords"><span class="cat-title"><a href="{$tsConfig.url}/admin/badwords">Censuras</a></span></li>

y debajo agregan
 
<li id="a_main"><span class="cat-title"><a href="{$tsConfig.url}/admin/packs">Control de iconos</a></span></li>

6 - En tema/templates/t.admin.tpl debajo de
{include file='admin_mods/m.admin_rangos.tpl'

agregar
{elseif $tsAction == 'packs'}
{include 
file='admin_mods/m.admin_packs.tpl'

7 - En tema/js/admin.js al final del archivo agregan
 
/**
* Control de paquete
* para agregar, editar y eliminar iconos
*/
var packs = new function() {
   this.reload = path => location.href = global_data.url + '/admin/packs?act=abrir&path=' + path,
   this.subir = () => {
      var formData = new FormData();
      formData.append('file', $('#image')[0].files[0]);
      formData.append('path', $('#path').val());
      $.ajax({
         url: global_data.url + '/admin-subir-icono.php',
         type: 'post',
         data: formData,
         contentType: false,
         processData: false,
         success: response => {
            switch(response.charAt(0)) {
               case '0':
                  mydialog.alert('Error', response.substring(3), false);
                  mydialog.center();
               break;
               case '1':
                  mydialog.show()
                  mydialog.title('Bien!')
                  mydialog.body(response.substring(3))
                  mydialog.buttons(true, true, 'Continuar', 'packs.reload(' + carpeta + ')', true, false, false);
                  /*mydialog.buttons({mostrar:true,texto:'Continuar',accion:`packs.reload('${path}')`,activo:true});*/
                  mydialog.center()
               break;
            }
         }
      });
      return false;
   },
   this.borrar = (carpeta, hash, status) => {
      if(!status) {
         mydialog.show()
         mydialog.title('¿Deseas eliminar ' + (carpeta == 'med' ? 'estos iconos' : 'este icono') + '?')
         mydialog.body('Esto eliminará el/los iconos de su tema')
         mydialog.buttons(true, true, 'Continuar', 'packs.borrar(' + carpeta + ', ' + hash + ', true)', true, false, true, 'No', 'close', true, true);
         /*mydialog.buttons([
            {mostrar:true,texto:'Continuar',accion:`packs.borrar('${carpeta}', '${hash}', true)`,activo:true},
            {mostrar:true,texto:'No',accion:'cerrar',activo:true}
         ]);*/
         mydialog.center()
      } else {
         var params = ['path=' + carpeta, 'hash=' + hash].join('&')
         $.post(global_data.url + '/admin-eliminar-icono.php', params, del => {
            mydialog.close();
            if(del) {
               if(carpeta === 'med') {
                  $("tr." + hash).each( (inx, trh) => trh.remove())
               } else $("tr." + hash).remove()
            }
         })
      }
   }
}


8 - Suben Debes agradecer para ver el contenido... a tema/images/

Para la próxima le quiero agregar un paginador, y la subida de múltiples imágenes...

NOTA: Para que funciones correctamente, el complemento le asignará a las carpetas ran, cat y med los permisos necesarios para que funcione, en caso que tenga error o no suba las imágenes a dichas carpetas lo que deben hacer es darle permisos 0777 manualmente a las carpetas mencionadas
Responder Compartir


Compartir en:

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)