02-22-2022, 05:58 PM
(Última modificación: 07-13-2022, 10:10 PM por Miguel92.
Razón: Me olvide de un paso!
)
9
Bueno 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.
Código PHP: ( Seleccionar Todo )
# 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 $carpeta) chmod($smarty->template_dir["images"] . 'icons/' . $carpeta, 0777);
# 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]), 0, 6),
"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 = [16, 32];
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
Código PHP: ( Seleccionar Todo )
$smarty->template_dir["images"] . 'icons/'
y lo reemplazas por
Código PHP: ( Seleccionar Todo )
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
Código PHP: ( Seleccionar Todo )
global $smarty;
2 - En inc/php/admin.php buscan
Código PHP: ( Seleccionar Todo )
} elseif($action == 'creditos'){
y arriba agregan
Código PHP: ( Seleccionar Todo )
# 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
Código PHP: ( Seleccionar Todo )
'admin-badwords-delete' => array('n' => 4, 'p' => ''),
y debajo pegan
Código PHP: ( Seleccionar Todo )
'admin-eliminar-icono' => array('n' => 4, 'p' => ''),
'admin-subir-icono' => array('n' => 4, 'p' => ''),
más abajo
Código PHP: ( Seleccionar Todo )
default:
die('0: Este archivo no existe.');
break;
arriba agregan
Código PHP: ( Seleccionar Todo )
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
Código: ( Seleccionar Todo )
<div class="boxy-title">
<h3>Control de paquetes de imagenes</h3>
</div>
<div id="res" class="boxy-content">
<p class="alerts ok">Desde aquí 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ías">
<strong style="margin-top:4px;display: block;">Categorí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
Código: ( Seleccionar Todo )
<li id="a_badwords"><span class="cat-title"><a href="{$tsConfig.url}/admin/badwords">Censuras</a></span></li>y debajo agregan
Código: ( Seleccionar Todo )
<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
Código PHP: ( Seleccionar Todo )
{include file='admin_mods/m.admin_rangos.tpl'}
agregar
Código PHP: ( Seleccionar Todo )
{elseif $tsAction == 'packs'}
{include file='admin_mods/m.admin_packs.tpl'}
7 - En tema/js/admin.js al final del archivo agregan
Código: ( Seleccionar Todo )
/**
* 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


Facebook
Twitter
Reddit
Digg
del.icio.us
Tumblr
Pinterest
Blogger
Fark
LinkedIn
Mix
Google