¿Ya tienes cuenta? Inicia sesión aquí
Últimos temas
-
Cómo funcionan las Mision...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
Ayer, 09:46 PM
» Respuestas: 0
» Vistas: 52 -
V6 Original/Dark/Memes (A...
Foro: Diseños Terminados
Último mensaje por: carlos007r
Ayer, 11:08 AM
» Respuestas: 26
» Vistas: 6,334 -
V5
Foro: Diseños Terminados
Último mensaje por: Aeikox
06-13-2026, 12:16 AM
» Respuestas: 8
» Vistas: 1,447 -
Risus 1.3 Actualizado jQu...
Foro: Risus 1.3
Último mensaje por: Tronlar
06-12-2026, 10:45 PM
» Respuestas: 55
» Vistas: 10,660 -
Preguntas Frecuentes y So...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
06-12-2026, 06:17 PM
» Respuestas: 0
» Vistas: 56 -
Cómo registrar tu comunid...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
06-12-2026, 05:32 PM
» Respuestas: 0
» Vistas: 50 -
Cómo monetizar tu comunid...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
06-11-2026, 07:19 PM
» Respuestas: 0
» Vistas: 48 -
Introducción al SEO para ...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
06-11-2026, 06:58 PM
» Respuestas: 0
» Vistas: 57 -
Guía completa de SEO para...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
06-11-2026, 06:48 PM
» Respuestas: 0
» Vistas: 59 -
Diccionario de términos b...
Foro: Guías y Tutoriales
Último mensaje por: Tronlar
06-11-2026, 01:41 PM
» Respuestas: 0
» Vistas: 82
Estadísticas del foro
- Mensajes del foro:1,957
- Temas del foro:614
- Miembros:1,036
- Último miembro:carlos007r
Sección Novatos v1.0
Para Risus Nova 2.0 — PHPost
Para Risus Nova 2.0 — PHPost
Capturas
[img]Registrate o inicia tu sesión para ver este contenido[/img]
[img]Registrate o inicia tu sesión para ver este contenido[/img]
Sección dedicada a los usuarios novatos con sus posts y un TOP propio. Inspirado en la sección Novatos de Taringa. Reescrito desde cero para Risus Nova 2.0.
🌱 Características
- Página propia en /novatos/
- Posts de usuarios con rango Novato paginados
- Posts fijados de novatos en la parte superior
- TOP Posts y TOP Usuarios novatos con filtros: Hoy, Semana, Mes, Histórico
- Enlace en el menú principal
- Sin instalador ni base de datos nueva
🛠️ Instalación
Paso 1 — Subir los archivos
Código:
inc/class/c.novatos.php → inc/class/
inc/php/novatos.php → inc/php/
t.novatos.tpl → themes/default/templates/
themes/default/templates/modules/m.novatos_tops.tpl → themes/default/templates/modules/Paso 2 — En .htaccess arriba de # FOTOS agregar esto:
Código:
# NOVATOS
RewriteRule ^novatos/$ inc/php/novatos.php?action= [QSA,L]
RewriteRule ^novatos/tops/$ inc/php/novatos.php?action=tops [QSA,L]Paso 3 — En head_submenu.tpl
Buscar:
Código:
<li{if $tsPage == 'buscador'} class="here"{/if}><a class=vctip title="Buscador" href="{$tsConfig.url}/buscador/">Buscador</a></li>Agregar antes:
Código:
<li{if $tsPage == 'novatos'} class="here"{/if}><a class=vctip title="Sección Novatos" href="{$tsConfig.url}/novatos/"><i class="fa-solid fa-seedling"></i> Novatos</a></li>Paso 4 — Borrar la caché
Borra el contenido de la carpeta /cache/ del sitio.
⚙️ Cambiar el rango novato
Si el rango novato en tu BD tiene un ID diferente al 3, abre c.novatos.php y cambia:
Código:
const RANGO_NOVATO = 3;🗑️ Desinstalar
Elimina los archivos y quita los cambios en .htaccess y head_menu.tpl.
Descarga
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Shoutbox v2.0
Reescrito desde cero para Risus Nova 2.0 — PHPost
Reescrito desde cero para Risus Nova 2.0 — PHPost
Captura
[img]Registrate o inicia tu sesión para ver este contenido[/img]
Shoutbox moderno reescrito completamente desde cero. Sin dependencias antiguas, con anti-flood, actualización automática cada 15 segundos y diseño limpio.
💬 Características
- Actualización automática cada 15 segundos
- Anti-flood — 10 segundos entre mensajes
- Máximo 200 caracteres por mensaje
- Solo usuarios registrados pueden escribir
- Visitantes ven los mensajes pero no pueden escribir
- Borrar mensaje propio con un clic
- Admins pueden borrar cualquier mensaje
- Sin dependencias antiguas (sin shadowbox, sin markItUp)
- Compatible con PHP 8.3 y Risus Nova 2.0
🛠️ Instalación
Paso 1 — Ejecutar el instalador
Sube la carpeta install/ a la raíz y accede a:
Código:
Registrate o inicia tu sesión para ver este contenido⚠️ Elimina la carpeta install/ cuando termine.
Paso 2 — Subir los archivos
Código:
inc/class/c.shoutbox.php → inc/class/
inc/php/ajax/ajax.shoutbox.php → inc/php/ajax/
themes/default/templates/modules/m.home_shoutbox.tpl → themes/default/templates/modules/
themes/default/templates/modules/m.shout_item.tpl → themes/default/templates/modules/Paso 3 — En t.home.tpl
Agregar donde quieran colocarlo en la columna centro o derecha:
Código:
{include file='modules/m.home_shoutbox.tpl'}Paso 4 — En posts.php
Buscar:
Código:
$smarty->assign("tsTopcat",$tsPosts->topcat());Agregar debajo:
Código:
// ── Shoutbox ──
require_once TS_CLASS . 'c.shoutbox.php';
$tsSB = new tsShoutbox();
$smarty->assign('tsShouts', $tsSB->getShouts());
// ──────────────Paso 5 — Borrar la caché
Borra el contenido de la carpeta /cache/ del sitio.
⚙️ Configurar
Abre inc/class/c.shoutbox.php y edita las constantes al principio:
- MAX_LEN = 200 — máximo caracteres por mensaje
- ANTIFLOOD = 10 — segundos entre mensajes
- MAX_SHOUTS = 20 — número de mensajes visibles
🗑️ Desinstalar
Código:
DROP TABLE IF EXISTS w_shoutbox;Elimina los archivos y quita los cambios en posts.php y t.home.tpl.
Descarga
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Tendencias y Destacados v1.0
Nuevo módulo para Risus Nova 2.0 — PHPost
Nuevo módulo para Risus Nova 2.0 — PHPost
Captura
[img]Registrate o inicia tu sesión para ver este contenido[/img]
Dos widgets para el sidebar de la portada: hashtags trending de las últimas 24h estilo Twitter y posts fijados por el admin.
🔥 Características
Tendencias (#hashtags)
- Tags más usados en las últimas 24h
- Tamaño proporcional al número de posts — más grande = más trending
- Clic en el tag busca posts con ese tag
- Sin instalador ni base de datos nueva — usa post_tags existente
Destacados (📌 PIN)
- Posts marcados como sticky por el admin
- Muestra título, comentarios, puntos y fecha
- El admin fija posts desde Moderar Post → Sticky
🛠️ Instalación
Paso 1 — Subir los archivos
Código:
inc/class/c.trending.php → inc/class/
themes/default/templates/modules/m.home_trending.tpl → themes/default/templates/modules/
themes/default/templates/modules/m.home_pins.tpl → themes/default/templates/modules/Paso 2 — En posts.php buscar:
Código PHP:
$smarty->assign("tsTopcat",$tsPosts->topcat());
}
}
Reemplazar por:
Código:
$smarty->assign("tsTopcat",$tsPosts->topcat());
// TRENDING Y PINS
require_once TS_CLASS . 'c.trending.php';
$tsTrend = new tsTrending();
$smarty->assign('tsTrendingTags', $tsTrend->getTrendingTags(24, 15));
$smarty->assign('tsPinnedPosts', $tsTrend->getPinnedPosts(5));
}
}Paso 3 — En t.home.tpl
Buscar:
Código:
{include file='modules/m.home_tags_relevantes.tpl'}Arriba agregar:
Código:
{include file='modules/m.home_pins.tpl'}
{include file='modules/m.home_trending.tpl'}Paso 4 — Borrar la caché
Borra el contenido de la carpeta /cache/ del sitio.
⚙️ Configurar
- Fijar un post — abre cualquier post y usa Moderar Post → Sticky
- Cambiar las horas del trending — cambia el 24 en getTrendingTags(24, 15)
- Cambiar número de pins — cambia el 5 en getPinnedPosts(5)
🗑️ Desinstalar
Elimina los archivos y quita los cambios en el controlador y t.home.tpl.
Descarga
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Vídeos v1.0
Nuevo módulo para Risus Nova 2.0 — PHPost
Nuevo módulo para Risus Nova 2.0 — PHPost
Capturas
[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]
[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]
[img]Registrate o inicia tu sesión para ver este contenido[/img]
[img]Registrate o inicia tu sesión para ver este contenido[/img]
Sistema completo de vídeos hecho desde cero para Risus Nova 2.0. Soporta YouTube y Vimeo, con comentarios, reportes, panel admin y control de permisos por rango.
🎬 Características
- Soporte para YouTube y Vimeo — pegar la URL y se genera el reproductor automáticamente
- Grid de tarjetas con miniatura de YouTube sin bandas negras
- Filtro por categoría y orden (nuevos / más vistos)
- Comentarios en cada vídeo
- Sistema de reportes — 3 reportes ocultan el vídeo automáticamente
- Panel admin con gestión de vídeos y categorías
- Control de permisos por rango desde Admin → Rangos
- 7 categorías por defecto (configurables desde el admin)
- Instalador automático — crea todas las tablas
- Diseño responsive
🛠️ Instalación
Paso 1 — Ejecutar el instalador
Sube la carpeta install/ a la raíz y accede a:
Código:
Registrate o inicia tu sesión para ver este contenidoEl instalador crea automáticamente:
- Tabla v_videos
- Tabla v_categorias con 7 categorías por defecto
- Tabla v_comentarios
- Tabla v_denuncias
- Permiso govid añadido a todos los rangos
⚠️ Elimina la carpeta install/ cuando termine.
Paso 2 — Subir los archivos
Código:
inc/class/c.videos.php → inc/class/
inc/php/videos.php → inc/php/
inc/php/ajax/ajax.videos.php → inc/php/ajax/
t.videos.tpl → themes/default/templates/
m.video_card.tpl → themes/default/templates/modules/
m.video_ver.tpl → themes/default/templates/modules/
m.video_nuevo.tpl → themes/default/templates/modules/
m.admin_videos.tpl → themes/default/templates/modules/
videos.css → themes/default/css/Paso 3 — En .htaccess
Arriba de # FOTOS agregar:
Código:
# VIDEOS
RewriteRule ^videos/$ inc/php/videos.php?action= [QSA,L]
RewriteRule ^videos/ver/([0-9]+)/$ inc/php/videos.php?action=ver&vid=$1 [QSA,L]
RewriteRule ^videos/nuevo/$ inc/php/videos.php?action=nuevo [QSA,L]
RewriteRule ^videos/usuario/([^/]+)/$ inc/php/videos.php?action=usuario&nick=$1 [QSA,L]
RewriteRule ^admin/videos$ inc/php/admin.php?action=videos [QSA,L]Paso 4 — En admin.php
Buscar:
Código:
} elseif($action == 'feed'){Agregar arriba:
Código:
} elseif($action == 'videos'){
require_once TS_CLASS . 'c.videos.php';
$tsV = new tsVideos();
if (!empty($_GET['addcat']) && !empty($_POST['vcat_name'])) {
$tsV->adminSaveCategoria();
$tsCore->redirectTo($tsCore->settings['url'].'/admin/videos');
}
$filtro = (int)($_GET['status'] ?? -1);
$smarty->assign('tsAdminVideos', $tsV->adminGetVideos());
$smarty->assign('tsVCategorias', $tsV->getCategorias());
$smarty->assign('tsVFiltro', $filtro);Paso 5 — En t.admin.tpl
Antes del {/if} final añade:
Código:
{elseif $tsAction == 'videos'}
{include file='modules/m.admin_videos.tpl'}Paso 6 — En m.admin_rangos.tpl
Buscar:
Código:
<dl>
<dt><label for="goaf">Anti-flood</label><br /><span>Tiempo que deben esperar entre acción.</span></dt>
<dd><input type="text" id="goaf" name="global-antiflood" value="{$tsRango.permisos.goaf}" style="width:30%"/></dd>
</dl>Debajo agregar:
Código:
<dl>
<dt><label for="govid">Publicar Vídeos</label><br /><span>Podrán publicar vídeos en el sitio.</span></dt>
<dd><input type="checkbox" id="govid" name="global-publicarvideos" {if $tsRango.permisos.govid == 'on'}checked{/if} /></dd>
</dl>Paso 7 — En c.admin.php
Buscar:
En saveRango() y newRango() busca la línea:
Código:
'gopfd' => $_POST['global-pointsforday']);Reemplazar por:
Código:
'gopfd' => $_POST['global-pointsforday'],
'govid' => $_POST['global-publicarvideos'],
);Paso 8 — En head_menu.tpl
Buscar:
Código:
{if $tsConfig.c_fotos_private == '1' && !$tsUser->is_member}{else}
<li class="tabbed {if $tsPage == 'fotos'}here{/if}" id="tabbedfotos">
<a title="Ir a Fotos" onclick="menu('fotos', this.href); return false;" href="{$tsConfig.url}/fotos/">Fotos <i class="fa-solid fa-caret-down"></i></a>
</li>
{/if}Debajo agregar:
Código:
<li class="tabbed {if $tsPage == 'videos'}here{/if}" id="tabbedvideos"><a title="Ir a Vídeos" href="{$tsConfig.url}/videos/">Vídeos <i class="fa-solid fa-film"></i></a></li>Paso 9 — Activar el permiso en los rangos
En Admin → Rangos → Editar cada rango y activa Publicar Vídeos.
Paso 10 — Borrar la caché
Borra el contenido de la carpeta /cache/ del sitio.
📋 URLs del módulo
- Portada de vídeos: /videos/
- Ver vídeo: /videos/ver/ID/
- Publicar vídeo: /videos/nuevo/
- Vídeos de usuario: /videos/usuario/NICK/
- Panel admin: /admin/videos
🗑️ Desinstalar
Código:
DROP TABLE IF EXISTS v_videos, v_categorias, v_comentarios, v_denuncias;Elimina los archivos y quita los cambios realizados.
Descarga
Mediafire
http://Registrate o inicia tu sesión par...0.rar/file
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Mediafire
http://Registrate o inicia tu sesión par...0.rar/file
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Newsletter v1.0
Nuevo módulo para Risus Nova 2.0 — PHPost
Nuevo módulo para Risus Nova 2.0 — PHPost
Captura
[img]Registrate o inicia tu sesión para ver este contenido[/img]
[img]Registrate o inicia tu sesión para ver este contenido[/img]
Sistema de newsletter con consentimiento explícito (RGPD). Los usuarios eligen si quieren recibir comunicaciones al registrarse. El admin puede enviar emails personalizados a todos los suscritos o por rangos específicos.
📧 Características
- Casilla opcional en el registro — consentimiento explícito
- Panel admin con estadísticas: suscritos / no suscritos / total
- Enviar por rango o a todos los suscritos
- Personalización con [usuario] para el nombre del destinatario
- Botón desactivado si no hay suscritos
- Email con enlace para cancelar la suscripción
- Cumple con el RGPD
🛠️ Instalación
Paso 1 — Ejecutar el instalador
Sube la carpeta install/ a la raíz y accede a:
Código:
Registrate o inicia tu sesión para ver este contenido⚠️ Elimina la carpeta install/ cuando termine.
Paso 2 — Subir los archivos
Código:
p.registro.form.tpl → themes/default/templates/php_files/
m.admin_newsletter.tpl → themes/default/templates/admin_mods/Paso 3 — En c.registro.php
Buscar:
Código:
$tsData['user_id'] = db_exec('insert_id');Debajo agregar:
Código:
// ── Newsletter: guardar consentimiento ──
$newsletter = !empty($_POST['newsletter']) ? 1 : 0;
db_exec([__FILE__, __LINE__], 'query',
"UPDATE u_miembros SET user_newsletter = '$newsletter'
WHERE user_id = '{$tsData['user_id']}'"
);
// ────────────────────────────────────────Paso 4 — En admin.php
Buscar:
Código:
} elseif($action == 'feed'){Arriba agregar:
Código:
} elseif($action == 'newsletter'){
// Estadísticas
$stats = [
'suscritos' => 0,
'no_suscritos' => 0,
'total' => 0,
];
$r = db_exec('fetch_row', db_exec([__FILE__, __LINE__], 'query',
"SELECT
SUM(user_newsletter = 1) AS s,
SUM(user_newsletter = 0) AS n,
COUNT(*) AS t
FROM u_miembros WHERE user_activo = '1' AND user_baneado = '0'"
));
if ($r) {
$stats['suscritos'] = (int)$r[0];
$stats['no_suscritos'] = (int)$r[1];
$stats['total'] = (int)$r[2];
}
$smarty->assign('tsNewsletterStats', $stats);
// Rangos con conteo de suscritos
$rangos = result_array(db_exec([__FILE__, __LINE__], 'query',
"SELECT r.rango_id, r.r_name, r.r_color,
COUNT(u.user_id) AS suscritos
FROM u_rangos AS r
LEFT JOIN u_miembros AS u
ON u.user_rango = r.rango_id
AND u.user_newsletter = '1'
AND u.user_activo = '1'
AND u.user_baneado = '0'
GROUP BY r.rango_id
ORDER BY r.r_cant ASC"
)) ?: [];
$smarty->assign('tsNewsletterRangos', $rangos);
// Enviar
if (!empty($_GET['save']) && !empty($_POST['nl_subject']) && !empty($_POST['nl_body'])) {
$asunto = $tsCore->setSecure($_POST['nl_subject']);
$cuerpo = $_POST['nl_body'];
$rangos_sel = $_POST['rangos'] ?? [];
$todos = empty($rangos_sel);
if ($todos) {
$where = "user_newsletter = '1' AND user_activo = '1' AND user_baneado = '0'";
} else {
$ids = implode(',', array_map('intval', $rangos_sel));
$where = "user_newsletter = '1' AND user_activo = '1' AND user_baneado = '0' AND user_rango IN ($ids)";
}
$usuarios = result_array(db_exec([__FILE__, __LINE__], 'query',
"SELECT user_id, user_name, user_email FROM u_miembros WHERE $where"
)) ?: [];
if (empty($usuarios)) {
$smarty->assign('tsNewsletterError', 'No hay usuarios suscritos en los rangos seleccionados.');
} else {
require_once TS_CLASS . 'c.emails.php';
$total = 0;
foreach ($usuarios as $u) {
$msg = str_replace('[usuario]', $u['user_name'], $cuerpo);
$html = '<div style="font-family:Arial,sans-serif;max-width:600px;margin:0 auto;">';
$html .= '<div style="background:#3498db;padding:16px 24px;">';
$html .= '<h1 style="color:#fff;margin:0;font-size:22px;">' . $tsCore->settings['titulo'] . '</h1>';
$html .= '</div>';
$html .= '<div style="padding:24px;background:#fff;border:1px solid #eee;">';
$html .= '<p style="font-size:15px;color:#333;line-height:1.7;">' . nl2br(htmlspecialchars($msg)) . '</p>';
$html .= '</div>';
$html .= '<div style="padding:12px 24px;background:#f8f9fa;font-size:11px;color:#999;text-align:center;">';
$html .= 'Para cancelar la suscripción accede a tu <a href="' . $tsCore->settings['url'] . '/cuenta/">cuenta</a>.';
$html .= '</div></div>';
$tsEmail = new tsEmail('newsletter', 'newsletter');
$tsEmail->emailTo = $u['user_email'];
$tsEmail->emailSubject = $asunto;
$tsEmail->emailBody = $html;
$tsEmail->emailHeaders = $tsEmail->setEmailHeaders();
$tsEmail->sendEmail($tsCore->settings['email'], $u['user_email'], $asunto, $html);
$total++;
}
$smarty->assign('tsNewsletterEnviado', $total);
}
}Paso 5 — Añadir en t.admin.tpl
Antes del {/if} final añade:
Código:
{elseif $tsAction == 'newsletter'}
{include file='admin_mods/m.admin_newsletter.tpl'}Paso 6 — En m.admin_sidemenu.tpl agregan esto donde quieran:
Código:
<li><a href="{$tsConfig.url}/admin/newsletter"><i class="fa-solid fa-envelope-open-text"></i> Newsletter</a></li>Paso 7 — Borrar la caché
Borra el contenido de la carpeta [b]/cache/ del sitio.[/b]
🔒 RGPD
- El usuario da consentimiento explícito al registrarse
- Puede cancelar la suscripción desde su cuenta
- Solo se envía a usuarios que aceptaron recibirlo
- Las contraseñas nunca se incluyen en ningún email
🗑️ Desinstalar
Código:
ALTER TABLE u_miembros DROP COLUMN user_newsletter;Elimina los archivos y quita los hooks.
Descarga
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.[/b]
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.[/b]
Avisos Masivos v1.0
Nuevo módulo para Risus Nova 2.0 — PHPost
Nuevo módulo para Risus Nova 2.0 — PHPost
Captura
[img]Registrate o inicia tu sesión para ver este contenido[/img]
Permite al admin enviar un aviso a todos los usuarios o a rangos específicos desde el panel. El aviso aparece en las notificaciones de cada usuario.
📢 Características
- Enviar a todos los usuarios o a rangos específicos
- Selección múltiple de rangos
- Asunto y mensaje personalizables (máx 500 caracteres)
- Los admins y moderadores no reciben el aviso
- Confirmación antes de enviar
- Muestra cuántos usuarios recibieron el aviso
- Sin instalador ni base de datos nueva
🛠️ Instalación
Paso 1 — Subir el archivo
Código:
themes/default/templates/admin_mods/m.admin_avisos_masivos.tpl
→ themes/default/templates/admin_mods/Paso 2 — En admin.php
Buscar:
Código:
} elseif($action == 'feed'){Agregar arriba:
Código:
} elseif($action == 'avisosmasivos'){
$rangos = result_array(db_exec([__FILE__, __LINE__], 'query',
"SELECT rango_id, r_name, r_color FROM u_rangos
WHERE r_type = '1' ORDER BY r_cant ASC"
)) ?: [];
$smarty->assign('tsRangosDisponibles', $rangos);
if (!empty($_GET['save']) && !empty($_POST['av_subject']) && !empty($_POST['av_body'])) {
$asunto = $tsCore->setSecure($_POST['av_subject']);
$cuerpo = $tsCore->setSecure($_POST['av_body']);
$rangos_sel = $_POST['rangos'] ?? [];
$todos = empty($rangos_sel);
if ($todos) {
$where = "user_activo = '1' AND user_baneado = '0'";
} else {
$ids = implode(',', array_map('intval', $rangos_sel));
$where = "user_activo = '1' AND user_baneado = '0' AND user_rango IN ($ids)";
}
$usuarios = result_array(db_exec([__FILE__, __LINE__], 'query',
"SELECT user_id FROM u_miembros WHERE $where"
)) ?: [];
$total = 0;
$fecha = time();
foreach ($usuarios as $u) {
db_exec([__FILE__, __LINE__], 'query',
"INSERT INTO u_avisos (user_id, av_subject, av_body, av_date, av_type)
VALUES ('{$u['user_id']}', '$asunto', '$cuerpo', '$fecha', '4')"
);
$total++;
}
$smarty->assign('tsAvisoEnviado', $total);
}Paso 3 — Añadir en t.admin.tpl
Antes del {/if} final agregar:
Código:
{elseif $tsAction == 'avisosmasivos'}
{include file='admin_mods/m.admin_avisos_masivos.tpl'}Paso 4 — En m.admin_sidemenu.tpl ponen esto donde quieran:
Código:
<i class="fa-solid fa-bullhorn"></i> Avisos Masivos</a></li><li><a href="{$tsConfig.url}/admin/mensajesadmin"><i class="fa-solid fa-envelope"></i> Mensajes Privados</a></li>Paso 5 — Borrar la caché
Borra el contenido de la carpeta /cache/ del sitio.
🗑️ Desinstalar
Elimina la plantilla y quita los cambios en admin.php y t.admin.tpl.
Descarga
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Panel de Mensajes Privados v1.0
Nuevo módulo para Risus Nova 2.0 — PHPost
Nuevo módulo para Risus Nova 2.0 — PHPost
Capturas
[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]
Panel para gestionar los mensajes privados entre usuarios desde el admin. Ver conversaciones completas, eliminar mensajes individuales o respuestas, y enviar alertas a usuarios.
✉️ Características
- Lista paginada de todos los mensajes privados
- Ver remitente, destinatario, asunto y fecha
- Leer conversación completa con avatares
- Eliminar mensajes completos o respuestas individuales
- Enviar alerta al usuario directamente
- Muestra IP de cada respuesta
- Sin instalador ni base de datos nueva
🛠️ Instalación
Paso 1 — Subir los archivos
Código:
inc/class/c.mensajes_admin.php → inc/class/
inc/ajax.mensajes_admin.php → inc/php/ajax/
themes/default/templates/admin_mods/m.admin_mensajes.tpl → themes/default/templates/admin_mods/Paso 2 — En .htaccess
Buscar:
Código:
RewriteRule ^admin/news/nueva inc/php/admin.php?action=news&act=nuevo [QSA,L]Debajo agregar:
Código:
RewriteRule ^admin/mensajesadmin/leer/([0-9]+)$ inc/php/admin.php?action=mensajesadmin&act=leer&mpid=$1 [QSA,L]En admin.php
Buscar:
Código:
} elseif($action == 'temas'){Agregar arriba:
Código:
} elseif($action == 'mensajesadmin'){
require_once TS_CLASS . 'c.mensajes_admin.php';
$tsMAdmin = new tsMensajesAdmin();
if (empty($act)) {
$smarty->assign('tsMensajesLista', $tsMAdmin->getLista());
} elseif ($act == 'leer') {
$smarty->assign('tsMensajesCabecera', $tsMAdmin->getCabecera());
$smarty->assign('tsMensajesRespuestas', $tsMAdmin->getRespuestas());
}Paso 4 — En ajax.admin.php
Buscar:
Código:
'admin-badwords-delete' => array('n' => 4, 'p' => ''),Debajo agregar:
Código:
'mp-admin-borrar' => array('n' => 4, 'p' => ''),
'mp-admin-borrar-respuesta' => array('n' => 4, 'p' => ''),Buscar al final:
Código:
default:
die('0: Este archivo no existe.');
break;Agregar arriba:
Código:
case 'mp-admin-borrar':
case 'mp-admin-borrar-respuesta':
require_once TS_CLASS . 'c.mensajes_admin.php';
$tsMAdmin = new tsMensajesAdmin();
if ($action === 'mp-admin-borrar') echo $tsMAdmin->eliminarMensaje();
else echo $tsMAdmin->eliminarRespuesta();
break;Paso 5 — En t.admin.tpl
Antes del {/if} final agregar:
Código:
{elseif $tsAction == 'mensajesadmin'}
{include file='admin_mods/m.admin_mensajes.tpl'}Paso 6 — En m.admin_sidemenu.tpl agregar esto donde quieran:
Código:
<li><a href="{$tsConfig.url}/admin/mensajesadmin"><i class="fa-solid fa-envelope"></i> Mensajes Privados</a></li>Paso 7 — Borrar la caché
Borra el contenido de la carpeta /cache/ del sitio.
🗑️ Desinstalar
Elimina los archivos y quita los cambios en admin.php, ajax.admin.php y t.admin.tpl.
Descarga
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Destacados en Tiempo Real v1.0
Nuevo módulo para Risus Nova 2.0 — PHPost
Nuevo módulo para Risus Nova 2.0 — PHPost
Captura
[img]Registrate o inicia tu sesión para ver este contenido[/img]
Widget para la portada con los posts más votados en las últimas horas. Filtros de 15 min, 1h, 3h y 6h. El mismo estilo que el TOP Posts existente. Inspirado en el sistema de "Destacados" de Taringa.
🔥 Características
- 4 filtros de tiempo: 15 min, 1h, 3h y 6h
- Carga con AJAX — sin recargar la página
- Mismo estilo que el TOP Posts existente
- Sin instalador ni base de datos
- Solo 2 archivos a subir
🛠️ Instalación
Paso 1 — Subir los archivos
Código:
inc/php/ajax/ajax.destacados.php → inc/php/ajax/
themes/default/templates/modules/m.destacados.tpl → themes/default/templates/modules/Paso 2 — Añadir el widget en la portada
En t.home.tpl pones esto donde quieras:
Código:
{include file='modules/m.destacados.tpl'}Paso 3 — Borrar la caché
Borra el contenido de la carpeta /cache/ del sitio.
🗑️ Desinstalar
Elimina los 2 archivos y quita el include de la plantilla.
Descarga
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Niveles de Actividad v1.0
Nuevo módulo para Risus Nova 2.0 — PHPost
Nuevo módulo para Risus Nova 2.0 — PHPost
Captura
[img]Registrate o inicia tu sesión para ver este contenido[/img]
Muestra en el perfil del usuario su nivel de actividad con una barra de progreso hacia el siguiente rango. Usa los rangos ya configurados en el script — no crea nuevos.
📊 Características
- Barra de progreso hacia el siguiente rango
- Muestra puntos actuales y cuántos faltan
- Rangos especiales (Admin, Mod) — barra dorada sin progreso
- Usa los rangos existentes del script
- Sin instalador ni base de datos
🛠️ Instalación
Paso 1 — Subir los archivos
Código:
inc/nivel_helper.php → inc/class/
m.perfil_nivel.tpl → themes/default/templates/modules/Paso 2 — En perfil.php
Busca en inc/php/perfil.php:
Código:
$smarty->assign("tsGeneral",$tsGeneral);Debajo agregar:
Código:
// ── Niveles de actividad ──
require_once TS_CLASS . 'nivel_helper.php';
$smarty->assign('tsNivel', tsGetNivel($tsInfo['stats']['user_puntos'], $tsInfo['stats']['user_rango']));
// ─────────────────────────Paso 3 — En m.perfil_sidebar.tpl
Añade antes del widget de medallas:
Código:
{include file='modules/m.perfil_nivel.tpl'}Paso 4 — Borrar la caché
Borra el contenido de la carpeta /cache/ del sitio.
🗑️ Desinstalar
Elimina los archivos y quita los hooks. No hay tablas que borrar.
Descarga
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Robots.txt Dinámico v1.0
Nuevo módulo para Risus Nova 2.0 — PHPost
Nuevo módulo para Risus Nova 2.0 — PHPost
Capturas
[img]Registrate o inicia tu sesión para ver este contenido[/img]
[img]Registrate o inicia tu sesión para ver este contenido[/img]
Añade un editor de robots.txt en el panel de admin. Edita el contenido desde el navegador sin necesidad de FTP. Incluye un robots.txt por defecto optimizado para el script.
🤖 Características
- Editor de robots.txt en el panel admin
- Robots.txt por defecto optimizado para Risus Nova
- Botón para restaurar el contenido por defecto
- La URL del sitemap se añade automáticamente con tu dominio
- Ver el robots.txt actual con un clic
🛠️ Instalación
Paso 1 — Subir los archivos
Código:
robots.txt → raíz del sitio
robots_default.txt → raíz del sitio
inc/php/robots.php → inc/php/
themes/default/templates/admin_mods/m.admin_robotstxt.tpl → themes/default/templates/admin_mods/Paso 2 — En admin.php
Busca:
Código:
} elseif($action == 'feed'){Añade justo antes:
Código:
} elseif($action == 'robotstxt'){
$robots_file = TS_ROOT . '/robots.txt';
$default_file = TS_ROOT . '/robots_default.txt';
if (!empty($_GET['reset']) && file_exists($default_file)) {
copy($default_file, $robots_file);
$tsCore->redirectTo($tsCore->settings['url'] . '/admin/robotstxt?saved=1');
}
if (!empty($_GET['save']) && isset($_POST['contenido'])) {
$contenido = strip_tags($_POST['contenido']);
if (file_put_contents($robots_file, $contenido) !== false) {
$smarty->assign('tsRobotsSaved', true);
} else {
$smarty->assign('tsRobotsError', 'No se pudo guardar. Verifica los permisos de escritura.');
}
}
if (!empty($_GET['saved'])) $smarty->assign('tsRobotsSaved', true);
$contenido_actual = file_exists($robots_file)
? htmlspecialchars(file_get_contents($robots_file))
: htmlspecialchars(file_get_contents($default_file));
$smarty->assign('tsRobotsContenido', $contenido_actual);Paso 3 — Añadir en t.admin.tpl
Añade antes del {/if} final:
Código:
{elseif $tsAction == 'robotstxt'}
{include file='admin_mods/m.admin_robotstxt.tpl'}Paso 4 — En m.admin_sidemenu.tpl poner esto donde quieran
Código:
<li><a href="{$tsConfig.url}/admin/robotstxt"><i class="fa-solid fa-robot"></i> Robots.txt</a></li>Paso 5 — Borrar la caché
Borra el contenido de la carpeta /cache/ del sitio.
⚠️ Permisos
El archivo robots.txt en la raíz debe tener permisos de escritura (644 o 666). Si no se puede guardar verifica los permisos desde el cPanel o FTP.
🗑️ Desinstalar
Elimina los archivos y quita los cambios en admin.php y t.admin.tpl.
Descarga
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.
Mediafire
http://Registrate o inicia tu sesión par... contenido
Google Drive
http://Registrate o inicia tu sesión par... contenido
¿Tienes dudas o encuentras algún problema? Déjalo en los comentarios.

