¡Bienvenido a PHPost!

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

Descarga Risus Nova 2.0   (Ver notas de la versión) Estable | Actualizado: 16/06/2026

Regístrate Descargar Risus Nova
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 en:

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)