¿Se pueden crear familias de Rangos según el conteo de mensajes?

Started by genarok, July 23, 2012, 10:49:41 AM

Previous topic - Next topic

genarok

Hola a todos!

Estoy montando un foro y se me ha ocurrido que estaría muy bien que cada usuario pudiera elegir digamos un grupo al que pertenecer, y que según el conteo de sus mensajes tenga un rango dentro de ese grupo mayor o menor.

A ver si me explico,


  • Lo normal es que si no perteneces a un grupo en concreto (usuario normal vaya), vayas subiendo de rango según los mensajes que escribes (novato, profesional, jefe, etc....).
  • O bien puedes elegir un grupo del foro (si los hay y son abiertos), y tener ese rango siempre contigo dando igual los mensajes que lleves.

Lo que yo quiero es que en mi foro, el usuario pueda elegir un grupo (digamos por ejemplo que se une al grupo de "Magos") y dentro de ese grupo vaya subiendo de nivel conforme escribe más mensajes (aprendiz (50), hechicero (100), mago (150), etc...). Mientras que otro usuario puede elegir otro grupo (Guerreros, por ejemplo), e ir subiendo de nivel del mismo modo (Luchador (50), Escudero (100), Caballero (150), etc...).

Espero haberme explicado bien.

Creo que podría molar, no? Se podría hacer de algún modo?

Diego Andrés

Suena bien la idea, lamentablemente en smf eso no es posible por el momento

SMF Tricks - Free & Premium Responsive Themes for SMF.

genarok

Quote from: Diego Andrés on July 24, 2012, 12:28:21 PM
Suena bien la idea, lamentablemente en smf eso no es posible por el momento

Vaya....

Gracias de todas formas, hubiera molado.

fre3men

Puedes hacerlo manualmente y sin complicarte mucho si lo único que va a hacer es reemplazar un texto. No obstante no lo he probado, tan solo lo he desarrollado mientras escribía esta misma respuesta y porque en teoría debería funcionar (si hay algún error, simplemente habría que depurarlo).


Modificación y creación de código

Debes modificar el archivo Display.template.php en Themes/default (nunca antes de hacer un backup del mismo).

En Display.template.php has de buscar esto:

// Don't show these things for guests.
if (!$message['member']['is_guest'])
{
// Show the post group if and only if they have no other group or the option is on, and they are in a post group.
if ((empty($settings['hide_post_group']) || $message['member']['group'] == '') && $message['member']['post_group'] != '')
echo '
<li class="postgroup">', $message['member']['post_group'], '</li>';


Has de sustituir ', $message['member']['post_group'], ' por esto:

', $txt['mod_groups'][$message['member']['group']][$message['member']['post_group']], '

Ahora en index.english.php (y de cualquier otro idioma instalado), deberés añadir al final del archivo esto:

$txt['mod_groups'] = array(
'Mago' => array(
'Grupo 1' => 'Aprendiz',
'Grupo 2' => 'Hechicero',
'Grupo 3' => 'Mago',
),
'Guerrero' => array(
'Grupo 1' => 'Luchador',
'Grupo 2' => 'Escudero',
'Grupo 3' => 'Caballero',
),
);



Explicación más detallada

Para que funcione, debes crear los grupos primarios (regulares) de Mago y Guerrero (y/o más grupos que quieras, Ladrón, Alquimista...), y luego crear los grupos de conteo de la forma siguiente: Grupo 1, Grupo 2, Grupo 3... A estos grupos les asignas la cantidad de mensajes. Han de tener exactamente ese nombre, o los nombres que se han utilizado como índice del array, cambiarlos por los nombres de los grupos de conteo (en fin, que han de coincidir exactamente).

Este mod lo único que hará es bucar en un array (matriz) multidimensional, usando como primer índice el nombre del grupo regular al que pertenece el usuario y luego dentro de él, el índice con el nombre del grupo de conteo según los mensajes que tenga el usuario y mostrará el texto de la variable.

NOTA: No verifico que existen los índices en la matriz, así que si no pones bien los nombres de los grupos (al crearlos en la Base de Datos desde la Administración del SMF y escribirlos en el archivo de Idioma), te dará un error de variable no definida (en el apartado LOGS del SMF) y no mostrará ningún nombre de grupo.


Un saludo.

genarok

Hola tío,

Agredezco enormemente tu respuesta, pero por más que lo he probado no consigo dar en la tecla, no funciona.

El primer fallo que noto al cambiarlo todo es que pierdo la codificación (Spanish Es UTF-8), por lo que las tíldes y eso salen "raras", además tampoco funciona, solo me muestra el propio grupo regular, pero no el de conteo de mensajes.

He modificado los archivos:
- display.index.php
- index.english.php
- index.spanish_es-utf8

No se si debería haber cambiado otros idiomas o cual era el problema. He probado a elegir el idioma del foro "English" pero tampoco funcionaba.

Un saludo.

fre3men

Hola, acabo de comprobar el código que te he puesto, y tal como está a mi me ha funcionado (así que certifico que va).

He instalado un smf nuevo (2.0.2) con spanish utf-8 y he hecho los cambios que te he mencionado arriba y todo perfecto. No he cambiado los nombres de los grupos para ver como salía el error en el LOG del SMF al no exisitir dichos grupos, y claro está no aparecía el nombre cuando si visualizan los post. Luego el índice con texto Mago (en el $txt que te he puesto) como  Administrador y los de conteo pues Grupo 1 -> Novato, Grupo 2 -> Usuario Jr, Grupo 3 -> Usuario Completo y salía el texto que indicaba en el array.

Errores del LOG (primero sin cambiar el grupo primario y segundo sin el de conteo pero si el primario):


Hoy a las 14:20:38 pm
Tipo de error: Indefinidos
http://127.20.0.1/smf_2-0-2/index.php?topic=2.0
8: Undefined index: Administrador
Archivo: C:/wamp/www/smf_2-0-2/Themes/default/Display.template.php (main sub template - eval?)
Línea: 272

Hoy a las 14:21:08 pm
Tipo de error: Indefinidos
http://127.20.0.1/smf_2-0-2/index.php?topic=2.0
8: Undefined index: Novato
Archivo: C:/wamp/www/smf_2-0-2/Themes/default/Display.template.php (main sub template - eval?)
Línea: 272


Lo dicho, funciona bien, ¿te sale algún error en los LOGS?

¿Qué editor utilizas? (recomeindo siempre el Notepad++)

genarok

Voy a probar de nuevo.

¿Cuando dices añadir al final de los archivos de idiomas, es sólo en los dos que te he puesto arriba ( index.english.php
- index.spanish_es-utf8) o también en alguno más?

Y en estos mismos archivos, añado al final del código
Quote$txt['mod_groups'] = array(
   'Mago' => array(
      'Grupo 1' => 'Aprendiz',
      'Grupo 2' => 'Hechicero',
      'Grupo 3' => 'Mago',
      ),
   'Guerrero' => array(
      'Grupo 1' => 'Luchador',
      'Grupo 2' => 'Escudero',
      'Grupo 3' => 'Caballero',
      ),
   );
Antes o después de ?>?

Y la última, lo de Grupo 1, Grupo 2.... no hay que cambiarlo no? Solo hay que crear los grupos de conteo con los nombres Luchador, Escudero, etc... cierto?

Diego Andrés


SMF Tricks - Free & Premium Responsive Themes for SMF.

fre3men

Exacto, como te ha dicho Diego, es antes de eso, ya que es un tag (este concretamente el que cierra) que indica al intérprete de php que todo lo que hay entre ellos es código PHP.

QuoteY la última, lo de Grupo 1, Grupo 2.... no hay que cambiarlo no? Solo hay que crear los grupos de conteo con los nombres Luchador, Escudero, etc... cierto?

Si y no, tiene que coincidir los grupos de conteo dados de alta en el SMF con el nombre del índice de la matriz multidimensional. O los cambias en el SMF o cambias los nombres de los índices.

Ejemplo:
$txt['mod_groups'] = array(
'Administrador' => array(
'Novato' => 'Aprendiz', // Newbie
'Usuario Jr' => 'Hechicero', // Jr. Member
'Usuario Completo' => 'Mago', // Full Member
'Usuario Sr' => 'Gran Mago', // Sr. Member
'Usuario Héroe' => 'Mago Maestro', // Hero Member
),
);

Nota: los nombres de los grupos de conteo en castellano los he puesto de memoria, puede que no sean exactamente así. Lo que hay detras de las dos barras es texto comentado en php, te pongo el nombre del grupo de conteo que viene por defecto en una instalación en inglés.

Por cierto, de esta forma los nombres de los grupos también pueden estar en varios idiomas, cambiando el texto que quieres que aparezcan. Eso sí, has de copiar este array en TODOS los archivos de idiomas que tengas instalado (como mínimo en el de english, que en el SMF2 se carga siempre).

Advertisement: