COMPLEMENTOS Sistema de Referidos v1.0 - Versión para impresión
+- Phpost (
https://phpost.es)
+-- Foro: Risus Nova 2.0 (
https://phpost.es/forum-150.html)
+--- Foro: Complementos (
https://phpost.es/forum-164.html)
+---- Foro: Terminados (
https://phpost.es/forum-165.html)
+---- Tema:
COMPLEMENTOS Sistema de Referidos v1.0 (
/thread-989.html)
Sistema de Referidos v1.0 -
Tronlar - 05-28-2026
Sistema de Referidos v1.0
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]
Cada usuario tiene un enlace de invitación único. Cuando alguien se registra con ese enlace y activa su cuenta, el que invitó gana 10 puntos automáticamente y recibe una notificación.
🤝 Características
- Enlace de referido único por usuario: tudominio.com/registro?ref=NICK
- Puntos solo al activar la cuenta — evita cuentas falsas
- Un usuario solo puede tener un referidor
- Nadie puede referirse a sí mismo
- Notificación automática al ganar los puntos
- Widget en el perfil con enlace, estadísticas y lista de invitados
- Botón copiar enlace con un clic
- El ref se guarda en sesión — no se pierde si el usuario navega antes de registrarse
📋 Requisitos
- Risus Nova 2.0 instalado y funcionando
- PHP 8.0+
- MySQL 5.7+ / MariaDB 10.4+
🛠️ 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.referidos.php → inc/class/
themes/default/templates/modules/m.perfil_referidos.tpl → themes/default/templates/modules/
Paso 3 — En c.registro.php
Buscar:
Código:
$tsData['user_id'] = db_exec('insert_id');
Añade justo después:
Código:
// ── Referidos ──
require_once TS_CLASS . 'c.referidos.php';
$ref_nick = isset($_SESSION['ref_nick']) ? $_SESSION['ref_nick'] : ($tsCore->setSecure($_GET['ref'] ?? '') ?: $tsCore->setSecure($_POST['ref'] ?? ''));
if (!empty($ref_nick)) {
$tsRef = new tsReferidos();
$tsRef->guardarReferido($tsData['user_id'], $ref_nick);
}
// ────────────────
Paso 4 — En c.user.php — userActivate()
Abre inc/class/c.user.php y busca dentro de userActivate() esta línea:
Código:
if(db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE u_miembros SET user_activo = 1 WHERE user_id = \''.$tsUserID.'\'' )) {
return $tsData;
Cambiar por:
Código:
if(db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE u_miembros SET user_activo = 1 WHERE user_id = \''.$tsUserID.'\'' )) {
require_once TS_CLASS . 'c.referidos.php';
$tsRef = new tsReferidos();
$tsRef->procesarActivacion((int)$tsUserID);
return $tsData;
Esto cubre tanto la activación por email como la activación directa sin email.
Paso 5 — Guardar ref en sesión (header.php)
Al final de header.php añade:
Código:
// ── Guardar ref en sesión ──
if (!empty($_GET['ref'])) {
$_SESSION['ref_nick'] = $tsCore->setSecure($_GET['ref']);
}
// ───────────────────────────
Paso 6 — Widget en el perfil
En perfil.php buscar:
Código PHP:
$smarty->assign("tsGeneral",$tsGeneral);
Debajo agregar:
Código:
// ── Referidos ──
require_once TS_CLASS . 'c.referidos.php';
if ($tsUser->uid == $usuario['user_id']) {
$tsRef = new tsReferidos();
$ref_data = $tsRef->getReferidos($tsUser->uid);
$ref_data['url'] = tsReferidos::getUrl($tsUser->nick);
$ref_data['puntos_por_referido'] = tsReferidos::PUNTOS_POR_REFERIDO;
$smarty->assign('tsReferidos', $ref_data);
}
// ────────────────
En m.perfil_sidebar.tpl añade donde quieras:
Código:
{include file='modules/m.perfil_referidos.tpl'}
⚙️ Configurar puntos
Los puntos por referido se configuran en inc/class/c.referidos.php:
Código:
const PUNTOS_POR_REFERIDO = 10;
🗑️ Desinstalar
Código:
DROP TABLE IF EXISTS u_referidos;
Elimina los archivos y quita los hooks añadidos.