-
Cómo funcionan las Mision...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
06-14-2026, 09:46 PM
» Respuestas: 0
» Vistas: 105 -
V6 Original/Dark/Memes (A...
Foro: Diseños Terminados
Último mensaje por: carlos007r
06-14-2026, 11:08 AM
» Respuestas: 26
» Vistas: 6,358 -
V5
Foro: Diseños Terminados
Último mensaje por: Aeikox
06-13-2026, 12:16 AM
» Respuestas: 8
» Vistas: 1,453 -
Risus 1.3 Actualizado jQu...
Foro: Risus 1.3
Último mensaje por: Tronlar
06-12-2026, 10:45 PM
» Respuestas: 55
» Vistas: 10,674 -
Preguntas Frecuentes y So...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
06-12-2026, 06:17 PM
» Respuestas: 0
» Vistas: 85 -
Cómo registrar tu comunid...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
06-12-2026, 05:32 PM
» Respuestas: 0
» Vistas: 63 -
Cómo monetizar tu comunid...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
06-11-2026, 07:19 PM
» Respuestas: 0
» Vistas: 74 -
Introducción al SEO para ...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
06-11-2026, 06:58 PM
» Respuestas: 0
» Vistas: 82 -
Guía completa de SEO para...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
06-11-2026, 06:48 PM
» Respuestas: 0
» Vistas: 95 -
Diccionario de términos b...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
06-11-2026, 01:41 PM
» Respuestas: 0
» Vistas: 115
- Mensajes del foro:1,957
- Temas del foro:614
- Miembros:1,036
- Último miembro:carlos007r
Captura
En c.tops.php --> inc --> class --> c.tops.php
Buscar:
/*
getTopUsers()
*/
function getTopUsers($fecha, $cat){
//
$data = $this->setTime($fecha);
$category = empty($cat) ? '' : 'AND post_category = '.$cat;
// PUNTOS
$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT SUM(p.post_puntos) AS total, u.user_id, u.user_name FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id WHERE p.post_status = 0 AND p.post_date ***** '.$data['start'].' AND '.$data['end'].' '.$category.' GROUP BY p.post_user ORDER BY total DESC LIMIT 10');
$array['puntos'] = result_array($query);
// SEGUIDORES
$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT COUNT(f.follow_id) AS total, u.user_id, u.user_name FROM u_follows AS f LEFT JOIN u_miembros AS u ON f.f_id = u.user_id WHERE f.f_type = 1 AND f.f_date ***** '.$data['start'].' AND '.$data['end'].' GROUP BY f.f_id ORDER BY total DESC LIMIT 10');
$array['seguidores'] = result_array($query);
// MEDALLAS
$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT COUNT(m.medal_for) AS total, u.user_id, u.user_name, wm.medal_id FROM w_medallas_assign AS m LEFT JOIN u_miembros AS u ON m.medal_for = u.user_id LEFT JOIN w_medallas AS wm ON wm.medal_id = m.medal_id WHERE wm.m_type = \'1\' AND m.medal_date ***** '.$data['start'].' AND '.$data['end'].' GROUP BY m.medal_for ORDER BY total DESC LIMIT 10');
$array['medallas'] = result_array($query);
//
return $array;
}
Arriba de:
//
return $array;
Agregar:
// POSTS
$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT COUNT(p.post_id) AS total, u.user_id, u.user_name FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id WHERE p.post_status = 0 AND p.post_date ***** '.$data['start'].' AND '.$data['end'].' '.$category.' GROUP BY p.post_user ORDER BY total DESC LIMIT 10');
$array['posts'] = result_array($query);
En m.top_users.tpl --> themes --> default --> templates --> modules --> m.top_users.tpl
Buscar:
<!--MEDALLAS-->
Arriba agregar:
<!--POSTS-->
<div class="boxy xtralarge" style="height: 440px">
<div class="boxy-title">
<h3>Top usuario con más posts</h3>
<span class="icon-noti follow-n"></span>
</div>
<div class="boxy-content">
{if !$tsTops.posts}<div class="emptyData">Nada por aqui</div>
{else}
<ol>
{foreach from=$tsTops.posts item=p}
<li class="categoriaUsuario clearfix">
<img width="16" height="16" src="{$tsConfig.url}/files/avatar/{$p.user_id}_50.jpg"/>
<a href="{$tsConfig.url}/perfil/{$p.user_name}">{$p.user_name}</a> <span class="qtip" title="tiene un total de {$p.total} Posts">{$p.total}</span>
</li>
{/foreach}
</ol>
{/if}
</div>
</div>
Creditos: Nico
Capturas
En c.monitor.php --> inc --> class --> c.monitor.php
Buscar:
case 17:
return 'SELECT f.foto_id, f.f_title, f.f_user, m.medal_id, m.m_title, m.m_image, a.medal_for, u.user_id, u.user_name FROM w_medallas_assign AS a LEFT JOIN f_fotos AS f ON f.foto_id = a.medal_for LEFT JOIN u_miembros AS u ON u.user_id = f.f_user LEFT JOIN w_medallas AS m ON m.medal_id = a.medal_id WHERE m.medal_id = \''.(int)$data['obj_uno'].'\' AND f.foto_id = \''.(int)$data['obj_dos'].'\' LIMIT 1';
break;
Debajo agregar:
case 10:
return 'SELECT f_title, f_url, foto_id, f_user, u.user_name, u.user_id FROM f_fotos AS f LEFT JOIN u_miembros AS u ON f.f_user = u.user_id WHERE foto_id = \''.(int)$data['obj_uno'].'\' LIMIT 1';
break;
case 11:
return 'SELECT f_title, f_url, foto_id, f_user, u.user_name, u.user_id FROM f_fotos LEFT JOIN f_comentarios AS c ON c.cid LEFT JOIN u_miembros AS u ON f_user = u.user_id WHERE foto_id = \''.(int)$data['obj_uno'].'\' LIMIT 1';
break;
Buscar:
// PUBLICACION EN MURO
case 12:
$oracion['text'] = $this->monitor[$no_type]['text'].$txt_extra;
$oracion['link'] = $site_url.'/perfil/'.$tsUser->nick.'/'.$data['obj_uno'];
$oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $tsUser->nick;
$oracion['ltit'] = ($this->show_type == 1) ? $tsUser->nick : '';
break;
Arriba agregar:
case 10:
$oracion['text'] = $this->monitor[$no_type]['text'];
$oracion['link'] = $site_url.'/fotos/'.$data['user_name'].'/'.$data['foto_id'].'/'.$tsCore->setSEO($data['f_title']).'.html';
$oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $data['f_title'];
break;
case 11:
// CUANTOS
$no_total = $data['not_total'];
// MAS DE UNA ACCION
if($no_total > 1) {
$text = $this->monitor[$no_type]['text'][1].$txt_extra;
$oracion['text'] = str_replace('_REP_', "<b>{$no_total}</b>", $text);
}
else $oracion['text'] = $this->monitor[$no_type]['text'][0].$txt_extra;
//
$oracion['link'] = $site_url.'/fotos/'.$data['user_name'].'/'.$data['foto_id'].'/'.$tsCore->setSEO($data['f_title']).'.html';
$oracion['ltext'] = ($this->show_type == 1) ? $ln_text : $data['f_title'];
$oracion['ltit'] = ($this->show_type == 1) ? $data['f_title'] : '';
break;
Creditos: Nico
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.
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)
Autor del topic: Chctrpgo
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
,filemá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>',
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!
Capturas
Ejecutar esta consulta
ALTER TABLE p_posts ADD post_destacados VARCHAR( 180 ) NOT NULL;
En c.posts.php --> inc --> class --> c.posts.php
Buscar:
/*
getPreview()
*/
function getPreview(){
global $tsCore;
//
$titulo = $tsCore->setSecure($_POST['titulo'], true);
$cuerpo = $tsCore->setSecure($_POST['cuerpo'], true);
//
return array('titulo' => $titulo, 'cuerpo' => $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true));
}
Reemplazar por:
/*
getPreview()
*/
function getPreview(){
global $tsCore;
//
$titulo = $tsCore->setSecure($_POST['titulo'], true);
$destacados = $tsCore->setSecure($_POST['imagen'], true);
$cuerpo = $tsCore->setSecure($_POST['cuerpo'], true);
//
return array('titulo' => $titulo, 'destacados' => $destacados, 'cuerpo' => $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true));
}
Buscar:
'title' => $tsCore->parseBadWords($tsCore->setSecure($_POST['titulo'], true)),2,
Debajo agregar:
'destacados' => $tsCore->setSecure($_POST['destacados']),
Buscar:
// INSERTAMOS
$_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'] ? $_SERVER['X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
if(!filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP)) { die('0: Su ip no se pudo validar.'); }
if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_posts` (post_user, post_category, post_title, post_body, post_date, post_tags, post_ip, post_private, post_block_comments, post_sponsored, post_sticky, post_smileys, post_visitantes, post_status) VALUES (\''.$tsUser->uid.'\', \''.(int)$postData['category'].'\', \''.$postData['title'].'\', \''.$postData['body'].'\', \''.$postData['date'].'\', \''.$postData['tags'].'\', \''.$_SERVER['REMOTE_ADDR'].'\', \''.(int)$postData['private'].'\', \''.(int)$postData['block_comments'].'\', \''.(int)$postData['sponsored'].'\', \''.(int)$postData['sticky'].'\', \''.(int)$postData['smileys'].'\', \''.(int)$postData['visitantes'].'\', '.(!$tsUser->is_admod && ($tsCore->settings['c_desapprove_post'] == 1 || $tsUser->permisos['gorpap'] == true) ? '\'3\'' : '\'0\'').')')) {
$postID = db_exec('insert_id');
Reemplazar por:
// INSERTAMOS
$_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'] ? $_SERVER['X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
if(!filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP)) { die('0: Su ip no se pudo validar.'); }
if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `p_posts` (post_user, post_category, post_title, post_body, post_date, post_tags, post_ip, post_private, post_block_comments, post_sponsored, post_sticky, post_smileys, post_visitantes, post_status, post_destacados) VALUES (\''.$tsUser->uid.'\', \''.(int)$postData['category'].'\', \''.$postData['title'].'\', \''.$postData['body'].'\', \''.$postData['date'].'\', \''.$postData['tags'].'\', \''.$postData['destacados'].'\', \''.$_SERVER['REMOTE_ADDR'].'\', \''.(int)$postData['private'].'\', \''.(int)$postData['block_comments'].'\', \''.(int)$postData['sponsored'].'\', \''.(int)$postData['sticky'].'\', \''.(int)$postData['smileys'].'\', \''.(int)$postData['visitantes'].'\', '.(!$tsUser->is_admod && ($tsCore->settings['c_desapprove_post'] == 1 || $tsUser->permisos['gorpap'] == true) ? '\'3\'' : '\'0\'').')')) {
$postID = db_exec('insert_id');
Agregado:
, post_destacados
\''.$postData['destacados'].'\',
Buscar:
'title' => $tsCore->parseBadWords($_POST['titulo'], true),
Debajo agregar:
'destacados' => $tsCore->setSecure($_POST['destacados'], true),
Buscar:
// ACTUALIZAMOS
if($tsUser->uid == $data['post_user'] || !empty($tsUser->is_admod) || !empty($tsUser->permisos['moedpo'])){
if(db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE p_posts SET post_title = \''.$postData['title'].'\', post_body = \''.$postData['body'].'\', post_tags = \''.$tsCore->setSecure($postData['tags']).'\', post_category = \''.(int)$postData['category'].'\', post_private = \''.$postData['private'].'\', post_block_comments = \''.$postData['block_comments'].'\', post_sponsored = \''.$postData['sponsored'].'\', post_smileys = \''.$postData['smileys'].'\', post_visitantes = \''.$postData['visitantes'].'\', post_sticky = \''.$postData['sticky'].'\' WHERE post_id = \''.(int)$post_id.'\'') or exit( show_error('Error al ejecutar la consulta de la línea '.__LINE__.' de '.__FILE__.'.', 'db') )) {
Reemplazar por:
// ACTUALIZAMOS
if($tsUser->uid == $data['post_user'] || !empty($tsUser->is_admod) || !empty($tsUser->permisos['moedpo'])){
if(db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE p_posts SET post_title = \''.$postData['title'].'\', post_destacados = \''.$postData['destacados'].'\', post_body = \''.$postData['body'].'\', post_tags = \''.$tsCore->setSecure($postData['tags']).'\', post_category = \''.(int)$postData['category'].'\', post_private = \''.$postData['private'].'\', post_block_comments = \''.$postData['block_comments'].'\', post_sponsored = \''.$postData['sponsored'].'\', post_smileys = \''.$postData['smileys'].'\', post_visitantes = \''.$postData['visitantes'].'\', post_sticky = \''.$postData['sticky'].'\' WHERE post_id = \''.(int)$post_id.'\'') or exit( show_error('Error al ejecutar la consulta de la línea '.__LINE__.' de '.__FILE__.'.', 'db') )) {
Agregado:
, post_destacados = \''.$postData['destacados'].'\'
Buscar:
/*********/
$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_date, p.post_comments, p.post_puntos, p.post_private, p.post_sponsored, p.post_status, p.post_sticky, u.user_id, u.user_name, u.user_activo, u.user_baneado, c.c_nombre, c.c_seo, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : ' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? 'p.post_id > 0' : 'p.post_status = \'0\' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' '.$c_where.' '.$s_where.' GROUP BY p.post_id ORDER BY '.$s_order.' DESC LIMIT '.$start);
$lastPosts['data'] = result_array($query);
Reemplazar por:
/*********/
$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT p.post_id, p.post_user, p.post_category, p.post_title, p.post_destacados, p.post_date, p.post_comments, p.post_puntos, p.post_private, p.post_sponsored, p.post_status, p.post_sticky, u.user_id, u.user_name, u.user_activo, u.user_baneado, c.c_nombre, c.c_seo, c.c_img FROM p_posts AS p LEFT JOIN u_miembros AS u ON p.post_user = u.user_id '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : ' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' LEFT JOIN p_categorias AS c ON c.cid = p.post_category WHERE '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? 'p.post_id > 0' : 'p.post_status = \'0\' && u.user_activo = \'1\' && u.user_baneado = \'0\'').' '.$c_where.' '.$s_where.' GROUP BY p.post_id ORDER BY '.$s_order.' DESC LIMIT '.$start);
$lastPosts['data'] = result_array($query);
Buscar:
/*
getComentarios()
*/
Arriba agregar:
/*
Destacados
*/
function getLastDestacados(){
global $tsCore;
$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT post_id, post_user, post_category, post_title, post_date, post_puntos, post_comments, post_private, post_status, post_destacados, c_nombre, c_seo, c_img FROM p_posts AS p LEFT JOIN p_categorias AS c ON c.cid = post_category WHERE post_status = 0 ORDER BY post_puntos < 60 || 80 && post_comments < 15 DESC LIMIT 10');
$data = result_array($query);
//
return $data;
}
En posts.php --> inc --> php --> posts.php
Buscar:
// AFILIADOS
$smarty->assign("tsAfiliados",$tsAfiliado->getAfiliados());
Debajo agregar:
// DESTACADOS
$smarty->assign("tsDestacados",$tsPosts->getLastDestacados());
En m.agregar_from.tpl --> themes --> default --> templates --> modules --> m.agregar_from.tpl
Buscar:
<li>
<label>Tags</label>
<span style="display: none;" class="errormsg"></span>
<input type="text" tabindex="4" name="tags" maxlength="128" class="text-inp required" value="{$tsDraft.b_tags}"/>
Una lista separada por comas, que describa el contenido. Ejemplo: <b>gol, ingleses, Copa Oro, futbol, Chicharito, México</b>
</li>
Debajo agregar:
<li class="Thumbnail">
<label>Thumbnail</label>
<span style="display: none;" class="errormsg"></span>
<input type="text" tabindex="4" name="destacados" maxlength="500" class="text-inp required" value="{$tsDraft.b_destacados}"/>
<span class="toup-ta">
<b>Agrega la url de una imagen para agregar el Thumbnail. </b>
</span>
<div class="thumb-control">
<img src="{$tsDraft.b_destacados}" class="thumbnail-preview">
</li>
En t.home.tpl --> themes --> default --> templates --> t.home.tpl
Buscar:
<div id="derecha">
Debajo agregar:
{include file='modules/m.home_destacados.tpl'}
En estilo.css --> themes --> default --> estilo.css
Al final agregar:
.destacate{width:200px;height:70px;border-bottom:solid 1px #e0e0e0;display:block;background-color:#f8f8f8;margin-bottom:3px}.destacate a{color:#006595;background:0 0;border:none;font-size:11px;text-decoration:none;font-weight:700;cursor:pointer;width:100px;margin:-9px}.post-cat{color:#adadad;font-size:9px;line-height:14px;display:block;padding:0 5px;text-transform:uppercase}.post-image{float:left;/*! margin-right: 10px; */width:90px;height:68px;background:#eee}.post-title{color:#006595;font-size:13px;line-height:16px;font-weight:700;display:block;max-height:48px;overflow:hidden}.view-more-list{color:#006595;text-decoration:none;font-weight:700;cursor:pointer;padding:3px;border-top:1px solid #cfe9f4;border-radius:0 0 5px 5px;text-align:center;background:#eff9fd}.Thumbnail{padding:10px;background:#ddd;border-right:solid 30px #eee;position:relative;min-height:220px;margin-bottom:15px;width:320px}.Thumbnail>input{width:300px!important}.Thumbnail .thumbnail-preview{width:154px;height:116px;background:url(images/camera-big.png) #eee no-repeat center;margin:20px auto 10px;display:block;border:solid 4px #fff;outline:solid 1px #CCC}.Thumbnail label{color:#333;font-size:18px;text-shadow:1px 1px 0 #fff;padding:2px;text-align:left;margin-right:5px}#lastDestacado .wMod-h{background:url(images/icons/posts.png) no-repeat left center}.destacados-data{padding:0;text-align:center;position:relative;height:auto;overflow:hidden}
Y subir esta carpeta
Mega
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
Mediafire
http://Registrate o inicia tu sesión par... contenido
Uptobox
http://Registrate o inicia tu sesión par... contenido
4shared
http://Registrate o inicia tu sesión par... contenido
Creditos: Oficialphp
Hola a todos esto lo pueden aplicar si lo desean, es una modificación completa del mydialog que trae en tema/js/acciones.js, es bastante "viejo"(por decirlo de alguna forma), lo que hice fue quitar el código que tenía y que no hacía nada, mejore la parte del footer del modal al agregar los botones, ahora se puede entender mejor...
Algunas capturas de como va a quedar... (Esto puede llegar a cambiar si es que exista un elemento css que modifique el existente)
El modal es sus 3 versiones "Default", "Pequeño" y "Grande"
[img]Registrate o inicia tu sesión para ver este contenido[/img]
Modal alerta
[img]Registrate o inicia tu sesión para ver este contenido[/img]
Modal reintentar y error
[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, a lo que vinieron jajaja
1 - Buscan en js/acciones.js
var mydialog = {
... TODO EL CODIGO ..
}
document.onkeydown = function(e){
key = (e==null)?event.keyCode:e.which;
if(key == 27) mydialog.close();
};y lo reemplazan por
/* MyDialog 1.0 */
var mydialog = new function() {
// Opciones por defecto
this.options = {
fixed: true,
size: ''
},
this.close_button = true,
this.mask_close = true,
this.class_aux = '',
// Generamos la plantilla
this.template = `<div id="dialog">
<div id="title"></div>
<div id="cuerpo">
<div id="procesando"><div id="mensaje"></div></div>
<div id="modalBody"></div>
</div>
<div id="buttons"></div>
</div>`,
// Iniciamos
this.show = () => {
// Agregamos al body
$("#mydialog").html(this.template);
// Agregamos clases, si contiene
if(!empty(this.class_aux) || !empty(this.options.size)) {
$('#mydialog').addClass(this.class_aux + ' ' + this.options.size)
}
// Opciones de la mascara
$("#mydialog").prepend('<div id="mask"></div>')
if(this.mask_close) $("#mydialog > #mask").click(() => this.close())
// Agregamos los extras
if(this.options.fixed) $("body").attr("modal-open", true)
$('#mydialog #dialog').fadeIn('fast');
// Botón cerrar
if(this.close_button) {
$('#mydialog #dialog').append('<span class="close_dialog" onclick="mydialog.close()">×</span>');
}
},
this.close = () => {
$('#mydialog #dialog, #mydialog #mask').fadeOut('fast', () => $(this).remove());
if(this.options.fixed) $("body").removeAttr("modal-open")
this.procesando_fin();
},
this.center = () => {
var centrado = $("#dialog");
centrado.css({
'left': Math.round($(window).width() / 2) - Math.round(centrado.width() / 2),
'top': Math.round($(window).height() / 2) - Math.round(centrado.height() / 2)
})
},
this.title = string => $("#title").html(string)
this.body = string => $("#modalBody").html(string),
this.buttons = (all, display1, val1, action1, enabled1, focus1, display2, val2, action2, enabled2, focus2) => {
var buttons_add = $("#buttons")
// Con este mostramos los botones
if(all === true) {
// Accion close"
var close = 'mydialog.close()'
if(action1 === 'close') action1 = close;
if(action2 === 'close' || !val2) action2 = close;
if(!val2) {
val2 = 'Cancelar';
enabled2 = true;
}
// Mostramos boton 1
if(display1) buttons_add.append(`<input type="button" class="mBtn btnOk" onclick="${action1}" value="${val1}"` + (enabled1 ? '' : ' disabled') + `>`)
// Mostramos boton 2
if(display2) buttons_add.append(`<input type="button" class="mBtn btnCancel" onclick="${action2}" value="${val2}"` + (enabled2 ? '' : ' disabled') + `>`)
// Enfocamos
if(focus1) $('#mydialog #buttons .mBtn.btnOk').focus();
else if(focus2) $('#mydialog #buttons .mBtn.btnCancel').focus();
} else buttons_add.remove()
},
this.alert = (title, body, reload) => {
this.class_aux = 'modal-alert'
this.close_button = false
this.show();
this.title(title);
this.body(body);
this.buttons(true, true, 'Aceptar', 'mydialog.close();' + (reload ? 'location.reload();' : ''), true, true, false);
this.center();
},
this.error_500 = fun_reintentar => {
mydialog.procesando_inicio('Procesando...', 'Reintentando');
setTimeout(() => {
mydialog.procesando_fin();
mydialog.show();
mydialog.title('Error');
mydialog.body('Error al intentar procesar lo solicitado');
mydialog.buttons(true, true, 'Reintentar', 'mydialog.close();'+fun_reintentar, true, true, true, 'Cancelar', 'close', true, false);
mydialog.center();
}, 2000);
},
this.procesando_inicio = (value, title) => {
if(!this.is_show){
this.show();
this.title(title);
this.buttons(false);
this.center();
}
$('#mydialog #procesando #mensaje').html('<img src="'+global_data.img+'images/loading_bar.gif" />');
$('#mydialog #procesando').fadeIn('fast');
},
this.procesando_fin = () => $('#mydialog #procesando').fadeOut('fast')
}
document.onkeydown = function(e){
key = (e==null)?event.keyCode:e.which;
if(key == 27) mydialog.close();
}; 2 - En estilo.css buscan todos los #mask, #mydialog que existan y lo borran, ya que puede interferir con el nuevo estilo... Pero si quieren evitarlo pueden incluirlo directamente en extras.css o phpost.css
body[modal-open=true] {
overflow: hidden;
}
#mydialog #mask {
width: 100%;
height: 100vh;
position: fixed;
top: 0;
left: 0;
z-index: 1;
background-color: rgba(50, 50, 50, .7);
}
#mydialog #dialog {
--radius: 0.375rem;
--shadow: 0 0 .5rem rgba(49, 49, 49, .3);
--bordermodal: 1px solid rgba(150, 150, 150, .3);
background-color: var(--base-color-body);
color: var(--base-color-texto);
border: var(--bordermodal);
z-index: 99;
position: fixed;
width: 560px;
box-shadow: var(--shadow);
border-radius: var(--radius)!important;
}
#mydialog.small #dialog {
width: 300px;
}
#mydialog.large #dialog {
width: 700px;
}
#mydialog #dialog .close_dialog {
--whlh: 1.2rem;
position: absolute;
top: 0.76rem;
right: 0.66rem;
display: grid;
width: var(--whlh);
height: var(--whlh);
color: white;
background-color: red;
place-items: center;
line-height: 1rem;
font-size: var(--whlh);
cursor: pointer;
border-radius: .32rem;
}
#mydialog #dialog #title {
display: block;
padding: 0.82rem 1rem;
font-weight: 600;
border-bottom: var(--bordermodal);
position: relative;
}
#mydialog #dialog #mensaje img {
position: relative;
margin: 1rem auto;
display: block;
}
#mydialog #dialog #modalBody {
padding: 1rem;
max-height: 320px;
overflow-y: auto;
}
#mydialog #dialog #buttons {
display: flex;
justify-content: space-around;
align-items: center;
padding: .654rem 0;
border-top: var(--bordermodal);
width: 100%;
}
#mydialog #dialog #buttons .mBtn {
padding: .6rem 1.4rem;
}
#mydialog.modal-alert #dialog #title,
#mydialog.modal-alert #dialog #buttons {
border: none;
padding: 1rem;
}
#mydialog.modal-alert #dialog #modalBody {
padding: 0.4rem 1rem;
}
#mydialog.modal-alert #dialog #buttons {
display: block;
text-align: right;
} Nota:
Para activar el modal "pequeño" o "grande" deben buscar el modal que quieren modificar y buscan
mydialog.show(true);y arriba agregan
mydialog.options = {
size: 'tipo del modal' // Tipos: small o large
} Eso sería todo!
Capturas
En c.registro.php --> inc --> class --> c.registro.php
Buscar:
db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `u_portal` (`user_id`) VALUES (\''.$tsData['user_id'].'\')');
Debajo agregar:
// COMPROBAMOS CLONES
$realip = ($_SERVER['REMOTE_ADDR'] ? $_SERVER['REMOTE_ADDR'] : $_SERVER['X_FORWARDED_FOR']);
if($f = db_exec('num_rows', $q = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT user_name FROM u_miembros WHERE user_last_ip = \''.$tsCore->setSecure($realip).'\'')) || db_exec('num_rows', $qq = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT u.user_name FROM u_sessions AS s LEFT JOIN u_miembros AS u ON s.session_user_id = u.user_id WHERE s.session_ip = \''.$tsCore->setSecure($realip).'\' && s.session_user_id != \'0\''))){
$q = db_exec('fetch_row', $f ? $q : $qq);
$ms = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT user_id FROM u_miembros WHERE user_rango = \'1\' || user_rango = \'2\'');
while($row = db_exec('fetch_row', $ms)){
db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO u_avisos (user_id, av_subject, av_body, av_date, av_type) VALUES (\''.$row[0].'\', \'Posibles clones\', \'Posibles clones: @'.$q[0].' y @'.$tsCore->setSecure($tsData['user_nick']).'\', \''.time().'\', \'2\')') or die('0__'.show_error('Error al ejecutar la consulta de la línea '.__LINE__.' de '.__FILE__.'.', 'db'));
}
}
Creditos: Alan
Capturas
Administrador
En c.posts.php --> inc --> class --> c.posts.php
Buscar:
/*
getPreview()
*/
function getPreview(){
global $tsCore;
//
$titulo = $tsCore->setSecure($_POST['titulo'], true);
$cuerpo = $tsCore->setSecure($_POST['cuerpo'], true);
//
return array('titulo' => $titulo, 'cuerpo' => $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true));
}
Reemplazar por:
function getPreview(){
global $tsCore, $tsUser;
//
$titulo = $tsCore->setSecure($_POST['titulo'], true);
$cuerpo = $tsCore->setSecure($_POST['cuerpo'], true);
//
return array('titulo' => $titulo, 'cuerpo' => ($tsUser->is_admod == 1) ? html_entity_decode($tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true)) : $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true));
}
Buscar:
// SOLO MODERADORES Y ADMINISTRADORES
if(empty($tsUser->is_admod) && $tsUser->permisos['most'] == false) {
$postData['sponsored'] = 0;
$postData['sticky'] = 0;
} else {
$postData['sponsored'] = empty($_POST['patrocinado']) ? 0 : 1;
$postData['sticky'] = empty($_POST['sticky']) ? 0 : 1;
}
Debajo agregar:
if($tsUser->is_admod == 1){
$postData['body'] = html_entity_decode($postData['body']);
}
Buscar:
// ACTUALIZAMOS
if($tsUser->uid == $data['post_user'] || !empty($tsUser->is_admod) || !empty($tsUser->permisos['moedpo'])){
if(db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE p_posts SET post_title = \''.$postData['title'].'\', post_body = \''.$postData['body'].'\', post_tags = \''.$tsCore->setSecure($postData['tags']).'\', post_category = \''.(int)$postData['category'].'\', post_private = \''.$postData['private'].'\', post_block_comments = \''.$postData['block_comments'].'\', post_sponsored = \''.$postData['sponsored'].'\', post_smileys = \''.$postData['smileys'].'\', post_visitantes = \''.$postData['visitantes'].'\', post_sticky = \''.$postData['sticky'].'\' WHERE post_id = \''.(int)$post_id.'\'') or exit( show_error('Error al ejecutar la consulta de la línea '.__LINE__.' de '.__FILE__.'.', 'db') )) {
Arriba agregar:
if($tsUser->is_admod == 1){
$postData['body'] = html_entity_decode($postData['body']);
}
Fundador
En c.posts.php --> inc --> class --> c.posts.php
Buscar:
/*
getPreview()
*/
function getPreview(){
global $tsCore;
//
$titulo = $tsCore->setSecure($_POST['titulo'], true);
$cuerpo = $tsCore->setSecure($_POST['cuerpo'], true);
//
return array('titulo' => $titulo, 'cuerpo' => $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true));
}
Reemplazar por:
function getPreview(){
global $tsCore, $tsUser;
//
$titulo = $tsCore->setSecure($_POST['titulo'], true);
$cuerpo = $tsCore->setSecure($_POST['cuerpo'], true);
//
return array('titulo' => $titulo, 'cuerpo' => ($tsUser->uid == 1) ? html_entity_decode($tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true)) : $tsCore->parseBadWords($tsCore->parseBBCode($cuerpo), true));
}
Buscar:
// SOLO MODERADORES Y ADMINISTRADORES
if(empty($tsUser->is_admod) && $tsUser->permisos['most'] == false) {
$postData['sponsored'] = 0;
$postData['sticky'] = 0;
} else {
$postData['sponsored'] = empty($_POST['patrocinado']) ? 0 : 1;
$postData['sticky'] = empty($_POST['sticky']) ? 0 : 1;
}
Debajo agregar:
if($tsUser->uid == 1){
$postData['body'] = html_entity_decode($postData['body']);
}
Buscar:
// ACTUALIZAMOS
if($tsUser->uid == $data['post_user'] || !empty($tsUser->is_admod) || !empty($tsUser->permisos['moedpo'])){
if(db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE p_posts SET post_title = \''.$postData['title'].'\', post_body = \''.$postData['body'].'\', post_tags = \''.$tsCore->setSecure($postData['tags']).'\', post_category = \''.(int)$postData['category'].'\', post_private = \''.$postData['private'].'\', post_block_comments = \''.$postData['block_comments'].'\', post_sponsored = \''.$postData['sponsored'].'\', post_smileys = \''.$postData['smileys'].'\', post_visitantes = \''.$postData['visitantes'].'\', post_sticky = \''.$postData['sticky'].'\' WHERE post_id = \''.(int)$post_id.'\'') or exit( show_error('Error al ejecutar la consulta de la línea '.__LINE__.' de '.__FILE__.'.', 'db') )) {
Arriba agregar:
if($tsUser->uid == 1){
$postData['body'] = html_entity_decode($postData['body']);
}
Creditos: aperpen
Captura
En c.posts.php --> inc --> class --> c.posts.php
Al final de la última } agregar:
function getVoto(){
global $tsCore, $tsUser;
$post_id = intval($_GET['post_id']);
$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT tid, cant FROM p_votos WHERE tid = \''.(int)$post_id.'\' AND tuser = \''.$tsUser->uid.'\' AND type = \'1\' LIMIT 1');
$data = db_exec('fetch_assoc', $query);
return $data['cant'];
}
En posts.php --> inc --> php --> posts.php
Buscar:
// DATOS DEL RANGO DEL PUTEADOR
$smarty->assign("tsPunteador",$tsPosts->getPunteador());
Debajo agregar:
// VOTOS DEL POSTS
$smarty->assign("tsVoto",$tsPosts->getVoto());
En m.posts_metadata.tpl --> themes --> default --> templates --> modules --> m.posts_metadata.tpl
Buscar:
{if ($tsUser->is_admod || $tsUser->permisos.godp) && $tsUser->is_member == 1 && $tsPost.post_user != $tsUser->uid && $tsUser->info.user_puntosxdar >= 1}
Arriba agregar:
{if $tsVoto==true}
<div class="votod">Ya diste {$tsVoto} Puntos en este Post</div><br>
{else}
Buscar:
<hr class="divider"/>
{/if}
Debajo agregar:
{/if}
En extras.css --> themes --> default --> extras.css
Al final agregar:
.votod{font-family:Arial;background:#c4e19b none repeat scroll 0 0;padding:10px;color:green;font-weight:700;font-size:12px;text-align:center}
Creditos: Vellenger
Capturas
En c.posts.php --> inc --> class --> c.posts.php
Buscar:
// NOTIFICAR SI FUE CITADO Y A LOS QUE SIGUEN ESTE POST, DUEÑO
$this->quoteNoti($post_id, $data['post_user'], $cid, $comentario);
Debajo agregar:
// NOTIFICAR SI FUE MENCIONADO EN UN POST
$this->menTi($post_id, $data['post_user'], $cid, $comentario);
Buscar:
/*
editComentario()
*/
Arriba agregar:
/*
menTi()
:: Menciones notificacion.
*/
function menTi($post_id, $post_user, $cid, $comentario){
global $tsCore, $tsUser, $tsMonitor;
$ids = array();
$total = 0;
//
preg_match_all("/\B@([a-zA-Z0-9_-]{4,16}+)\b/",$comentario,$users);
//
if(!empty($users[1])) {
foreach($users[1] as $user){
# DATOS
$udata = explode('|',$user);
if(!is_array($udata)) {
$user = $user;
$lcid = $cid;
}
else {
$user = $udata[0];
$lcid = (int) $udata[1];
}
# COMPROBAR
if($user != $tsUser->nick){
$uid = $tsUser->getUserID($tsCore->setSecure($user));
if(!empty($uid) && $uid != $tsUser->uid && !in_array($uid, $ids)){
$ids[] = $uid;
$tsMonitor->setNotificacion(18, $uid, $tsUser->uid, $post_id, $lcid);
}
++$total;
}
}
}
//
return true;
}
En c.monitor.php --> inc --> class --> c.monitor.php
Buscar:
17 => array('text' => 'Tu foto recibió una medalla', 'css' => 'medal'),
Debajo agregar:
18 => array('text' => array('te mencionó en un', '_REP_ te mencionaron en un'), 'ln_text' => 'comentario', 'css' => 'blue_ball'),
Nota: Si ya tiene una notificación con número 18 cámbienlo por otro número.
Buscar:
case 1:
case 2:
case 3:
case 5:
case 6:
case 7:
case 8:
case 9:
Debajo agregar:
case 18:
Buscar:
// PUEDEN SER MAS DE UNO
case 2:
case 6:
case 7:
case 8:
case 9:
Debajo agregar:
case 18:
Buscar:
if($no_type == 8 || $no_type == 9
Reemplazar por:
if($no_type == 8 || $no_type == 9|| $no_type == 18
En m.monitor_sidebar.tpl --> themes --> default --> templates --> modules --> m.monitor_sidebar.tpl
Buscar:
<li><label><span class="monac_icons ma_comment_resp"></span><input type="checkbox" {if $tsData.filtro.f9 != true}checked="checked"{/if}onclick="notifica.filter('9', this)"/> Respuestas</label></li>
Debajo agregar:
<li><label style="font-weight: bold; color: #006595;"><span class="monac_icons ma_blue_ball"></span><input type="checkbox" {if $tsData.filtro.f18 != true}checked="checked"{/if}onclick="notifica.filter('18', this)"/> Menciones</label></li>
Creditos: tutan-kabron

