News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

[MOD] Rangos en base de antigüedad y cantidad de mensajes

Started by marcofbb, January 11, 2013, 08:11:22 AM

Previous topic - Next topic

marcofbb

Hace un par de días que quería ponerle a mi foro que los rangos en base de conteo de mensajes, también se pueda poner cuantos días de antigüedad tiene que cumplir el usuario para ganar dicho rango. Hoy aburrido y sin nada que hacer, me puse a programarlo y pude lograr mi objetivo.
Versión de SMF: 2.0.3
Demo: http://www.marcofbb.com.ar/
Demo de como usarlo: http://www.marcofbb.com.ar/foro/noticias/rangos/

Instalación

1- Ir a Sources/ManageMembergroups.php

Buscar
$_POST['min_posts'] = isset($_POST['min_posts']) && isset($_POST['group_type']) && $_POST['group_type'] == -1 && $_REQUEST['group'] > 3 ? abs($_POST['min_posts']) : ($_REQUEST['group'] == 4 ? 0 : -1);

Agregar debajo
$_POST['min_days'] = isset($_POST['min_days']) && isset($_POST['group_type']) && $_POST['group_type'] == -1 && $_REQUEST['group'] > 3 ? abs($_POST['min_days']) : ($_REQUEST['group'] == 4 ? 0 : -1);




Buscar
id_parent = {int:group_inherit}

Remplazar por
id_parent = {int:group_inherit}, min_days = {int:min_days}




Buscar
'min_posts' => $row['min_posts'],

Remplazar
'min_days' => $row['min_days'],




Buscar
, id_parent

Remplazar por
, id_parent, min_days




Buscar
'group_desc' => $_POST['group_desc'],

Agregar debajo
'min_days' => $_POST['min_days'],






2- Ir a Themes/default/ManageMembergroups.template.php

Buscar
if ($context['post_group'] || $context['undefined_group'])
echo '
<dt id="min_posts_text">
<strong>', $txt['membergroups_min_posts'], ':</strong>
</dt>
<dd>
<input type="text" name="min_posts" id="min_posts_input" size="5" class="input_text" />
</dd>';


Agregar abajo
if ($context['post_group'] || $context['undefined_group'])
echo '
<dt id="min_days_text">
<strong>Antiguedad en días:</strong>
</dt>
<dd>
<input type="text" name="min_days" id="min_days_input" size="5" class="input_text" />
</dd>';





Buscar
if ($context['group']['allow_post_group'])
echo '

<dt id="min_posts_text">
<label for="min_posts_input"><strong>', $txt['membergroups_min_posts'], ':</strong></label>
</dt>
<dd>
<input type="text" name="min_posts" id="min_posts_input"', $context['group']['is_post_group'] ? ' value="' . $context['group']['min_posts'] . '"' : '', ' size="6" class="input_text" />
</dd>';


Agregar debajo
if ($context['group']['allow_post_group'])
echo '

<dt id="min_posts_text">
<label for="min_days_input"><strong>Antiguedad en dias:</strong></label>
</dt>
<dd>
<input type="text" name="min_days" id="min_days_input"', $context['group']['is_post_group'] ? ' value="' . $context['group']['min_days'] . '"' : '', ' size="6" class="input_text" />
</dd>';







3- Ir a Sources/Subs.php

Buscar
id_group, min_posts

Remplazar por
id_group, min_posts, min_days




Buscar
while ($row = $smcFunc['db_fetch_assoc']($request))
$postgroups[$row['id_group']] = $row['min_posts'];


Remplazar por
while ($row = $smcFunc['db_fetch_assoc']($request)){
$postgroups[$row['id_group']]['min_posts'] = $row['min_posts']+1-1;
$postgroups[$row['id_group']]['min_days'] = (time() - ($row['min_days'] * 24 * 60 * 60));
}





Buscar
foreach ($postgroups as $id => $min_posts)
{
$conditions .= '
WHEN posts >= ' . $min_posts . (!empty($lastMin) ? ' AND posts <= ' . $lastMin : '') . ' THEN ' . $id;
$lastMin = $min_posts;
}


Remplazar por
foreach ($postgroups as $id => $value)
{
$min_days = $postgroups[$id]['min_days'];
$min_posts = $postgroups[$id]['min_posts'];
$conditions .= '
WHEN posts >= ' . $min_posts . ' AND date_registered <= ' . $min_days . ' THEN ' . $id;
}








Ejecutar en PHPmyadmin
ALTER TABLE smf_membergroups ADD min_days mediumint(9) DEFAULT 0






Para que funcione correctamente yo tuve que hacer, ir a Administracion > Configuracion del servidor > Cache; y Seleccionar "Sin cache" le damos guardar, y borramos los archivos de la carpeta "cache" de la raiz de nuestro foro.

Luego creamos el archivo rangoup.php
<?php// If SSI.php is in the same place as this file, and SMF isn't defined, this is being run standalone.if (file_exists(dirname(__FILE__) . '/SSI.php') && !defined('SMF')) require_once(dirname(__FILE__) . '/SSI.php');// Hmm... no SSI.php and no SMF?elseif (!defined('SMF')) die('<b>Error:</b> Cannot install - please verify you put this in the same place as SMF\'s index.php.');// All we're actually doing here is updating the post group (now "time spent online" based instead) for every memberupdateStats('postgroups');?>



Lo subimos a raiz del foro, y lo ejecutamos, desde el navegador poniendo www.tuweb.com/rangoup.php, luego lo borramos y activamos de nuevo el cache y listo funciona de maravilla






Bueno espero que les sea de ayuda, ya que busque y busque y no encontré un mod con estas características para SMF.
Mi blog y Foro

vicram10

Gracias por el aporte.. interesante mod..
por que no lo empaquetas?
que error tienes por eso debes deshabilitar el cache?

lean

Muy bueno, muy prolijo, es bueno que tengamos nuevos usuarios que aporten conocimientos.
Saludos

marcofbb

Quote from: vicram10 on January 11, 2013, 09:33:56 AM
Gracias por el aporte.. interesante mod..
por que no lo empaquetas?
que error tienes por eso debes deshabilitar el cache?

No es un error, si no que la copia del cache anterior a la instalación del mod, no guarda el parámetro min_days, es por eso que dejo una solución, así el usuario no se siente desorientado. En estos días voy a crear el paquete, para que sea más fácil de instalar

Saludos
Mi blog y Foro

4Kstore

Muy bueno esto, si no entendi mal se deben cumplir las 2 condiciones no? antiguedad y mensajes?.
Muchas gracias por compartir!

¡¡NEW MOD: Sparkles User Names!!!

marcofbb

Quote from: 4Kstore on January 12, 2013, 07:36:11 PM
Muy bueno esto, si no entendi mal se deben cumplir las 2 condiciones no? antiguedad y mensajes?.
Muchas gracias por compartir!

Así es, se tiene que cumplir la cantidad de mensajes puesta, y la antigüedad en días puesta

Saludos
Mi blog y Foro

4Kstore

Quote from: marcofbb on January 12, 2013, 07:56:49 PM
Quote from: 4Kstore on January 12, 2013, 07:36:11 PM
Muy bueno esto, si no entendi mal se deben cumplir las 2 condiciones no? antiguedad y mensajes?.
Muchas gracias por compartir!

Así es, se tiene que cumplir la cantidad de mensajes puesta, y la antigüedad en días puesta

Saludos

Ufff genial entonces! felicitaciones por el trabajo y tambien espero ver esto empaquetado como mod :)
Un gustazo amigo!
Saludos

¡¡NEW MOD: Sparkles User Names!!!

marcofbb

Si alguien quiere hacerlo en forma de Pack, sería genial. Sino esperen unas semanas que me pongo a hacerlo yo

Saludos
Mi blog y Foro

Advertisement: