Publicidad


Tema resuelto
Este tema está marcado como resuelto y, como tal, no requiere atención a menos que desee solucionar este problema.

Problemas en conteo de top x stat + top gracias

Publicado por PIRELA, 19 Octubre de 2021, 03:56

Tema anterior - Siguiente tema

0 Usuarios y 1 Visitante están viendo este tema.

PIRELA

Buenas noches amigos, ire directo al grano, eh realizado una modificación para el top x stat junto con el thank of matic para que aparesca un top gracias como se puede apreciar en la imagen, el conteo y de mas lo hace perfectamente pero hay un pequeño detalle y es que si agrego el codigo para que cuente las gracias y el top mensaje se puede ver que el top gracias esta ordenado de manera correcta es decir el 1 lugar es el que lleva mas gracias de todos pero en el top mensajes no ya que el que esta de 1ro es el mismo que esta de 1ro en el top gracias a pesar que tiene menos post que los demas, al parecer esta realizando un conteo global para esos 2 tops es decir combina los gracias dados junto con los post y quiero que hambos apartados de tops tengan su propio conteo individual y no afecte en otros tops.



aqui dejare el codigo que eh modificado, si alguien puede ordenarlo de manera correcta se lo agradeceria, espero su pronta respuesta chicos.

<?php
/**
 * Top X Stats (topxstats_)
 *
 * @file ./topxstats_source/resources/main_requests.php
 * @author Labradoodle-360 <>
 * @copyright Matthew Kerle, 2013
 *
 * @version 1.0.1
 */

if (!defined('SMF'))
	die('Hacking attempt...');

function topxstats_latest_members($num_stats, $show_color = false)
{
	global $smcFunc;
	$latest_members = array();
	$query = array(
		'columns' => 'mem.id_member, mem.real_name, mem.posts, mem.date_registered',
		'sources' => '{db_prefix}members AS mem'
	);
	if ($show_color === true)
	{
		$query['columns'] .= ', mgroup.online_color';
		$query['sources'] .= ' LEFT JOIN {db_prefix}membergroups AS mgroup ON (mgroup.id_group = mem.id_group)';
	}
	$request = $smcFunc['db_query']('', '
		SELECT ' . $query['columns'] . '
		FROM ' . $query['sources'] . '
		ORDER BY mem.date_registered DESC
		LIMIT {int:this_limit}',
		array(
			'this_limit' => $num_stats
		)
	);
	while ($row = $smcFunc['db_fetch_assoc']($request))
	{
		$row['online_color'] = !isset($row['online_color']) ? '' : $row['online_color'];
		$latest_members[$row['id_member']] = array(
			'link' => topxstats_format_link($row['id_member'], $row['real_name'], $row['online_color']),
			
			
			'datetime_registered' => timeformat($row['date_registered']
			),
			
			
		);
		
	}	
	$smcFunc['db_free_result']($request);
	return $latest_members;
}

function topxstats_top_posters($num_stats, $show_color = false)
{

	global $smcFunc;
	$top_gracias = array();
	$query = array(
		'columns' => 'mem.id_member, mem.real_name, mem.posts, mem.thank_you_post_became',
		'sources' => '{db_prefix}members AS mem',
		'where' => 'mem.thank_you_post_became >= {int:one}'
	);
	if ($show_color === true)
	{
		$query['columns'] .= ', mgroup.online_color';
		$query['sources'] .= ' LEFT JOIN {db_prefix}membergroups AS mgroup ON (mgroup.id_group = mem.id_group)';
	}
	
	$top_posters = array();
	$query = array(
		'columns' => 'mem.id_member, mem.real_name, mem.posts, mem.thank_you_post_became',
		'sources' => '{db_prefix}members AS mem',
		'where' => 'mem.posts >= {int:one}'
	);
	if ($show_color === true)
	{
		$query['columns'] .= ', mgroup.online_color';
		$query['sources'] .= ' LEFT JOIN {db_prefix}membergroups AS mgroup ON (mgroup.id_group = mem.id_group)';
	}

$request = $smcFunc['db_query']('', '
		SELECT ' . $query['columns'] . '
		FROM ' . $query['sources'] . '
		WHERE ' . $query['where'] . '
		ORDER BY mem.posts DESC
		LIMIT {int:this_limit}',
		
		
		array(
			'this_limit' => $num_stats,
			'one' => 1
		)
		);

$request = $smcFunc['db_query']('', '
		SELECT ' . $query['columns'] . '
		FROM ' . $query['sources'] . '
		WHERE ' . $query['where'] . '
		ORDER BY mem.thank_you_post_became DESC
		LIMIT {int:this_limit}',
		
		
		array(
			'this_limit' => $num_stats,
			'one' => 1
		)
		);
		
	while ($row = $smcFunc['db_fetch_assoc']($request))
	{
		$row['online_color'] = !isset($row['online_color']) ? '' : $row['online_color'];
		
		$top_posters[$row['id_member']] = array(
		    
		    
			'link' => topxstats_format_link($row['id_member'], $row['real_name'], $row['online_color']),
			'gracias' => $row['thank_you_post_became'],
			'posts' => $row['posts']
			
			
			
			
			
			
			
		);
	}
	
	
	
	
	$smcFunc['db_free_result']($request);
	return $top_posters;
	
	


	}
	

function topxstats_stats_sum($latest_members = 0, $latest_posts = 0, $top_gracias = 0, $top_posters = 0)
{
	return (count($latest_members) + count($latest_posts) + count($top_gracias) + count($top_posters));
}

function topxstats_format_link($mem_id, $real_name, $group_color = null, $target = 'self')
{
	global $scripturl;
	return '<a href="' . $scripturl . '?action=profile;u=' . $mem_id . '" target="_' . $target . '" title="' . $real_name . '"' . (!empty($group_color) ? ' style="color: ' . $group_color . ';"' : '') . '>' . shorten_subject($real_name, 16) . '</a>';
}



Rock Lee

¿Te tira algun error en el registro de errores? No hice pruebas y medio a ojo pero creo el problema esta en tu segundo llamado...

$top_posters = array();
	$query = array(
		'columns' => 'mem.id_member, mem.real_name, mem.posts',
		'sources' => '{db_prefix}members AS mem',
		'where' => 'mem.posts >= {int:one}'


Es la forma debe ir (al menos sin hacer pruebas) por que se esta llamando 2 veces y entra en error... igualmente cuando este en mi computadora hago algunas pruebas...


Saludos Familia!

PIRELA

Cita de: Rock Lee en 19 Octubre de 2021, 19:53
¿Te tira algun error en el registro de errores? No hice pruebas y medio a ojo pero creo el problema esta en tu segundo llamado...

$top_posters = array();
	$query = array(
		'columns' => 'mem.id_member, mem.real_name, mem.posts',
		'sources' => '{db_prefix}members AS mem',
		'where' => 'mem.posts >= {int:one}'


Es la forma debe ir (al menos sin hacer pruebas) por que se esta llamando 2 veces y entra en error... igualmente cuando este en mi computadora hago algunas pruebas...


Saludos Familia!

gracias por tu respuesta lee pero al colocar ese codigo deja de contar las gracias en el top gracias y me los deja en 0, pero se arregla el de top mensaje, la idea es que se cuenten hambos tops de manera que uno no afecte al otro.

Rock Lee

#3
Tengo ver los mods convinados como cargan los datos en la DB entonces debe ser el llamado le estoy errando donde lo guarda, ¿es el Top X Stats? y ¿Cual es el de gracias? por como ahi varios cambia algo del codigo.


Saludos Familia!




No lo probe pero usando la logica y comparandolo contra el original deberia funcionar... o si te marca error mirar el registro de errores debe mostrarte algo:

<?php
/**
 * Top X Stats (topxstats_)
 *
 * @file ./topxstats_source/resources/main_requests.php
 * @author Labradoodle-360 <>
 * @copyright Matthew Kerle, 2013
 *
 * @version 1.0.1
 */

if (!defined('SMF'))
	die('Hacking attempt...');

function topxstats_latest_members($num_stats, $show_color = false)
{
	global $smcFunc;
	$latest_members = array();
	$query = array(
		'columns' => 'mem.id_member, mem.real_name, mem.posts, mem.date_registered',
		'sources' => '{db_prefix}members AS mem'
	);
	if ($show_color === true)
	{
		$query['columns'] .= ', mgroup.online_color';
		$query['sources'] .= ' LEFT JOIN {db_prefix}membergroups AS mgroup ON (mgroup.id_group = mem.id_group)';
	}
	$request = $smcFunc['db_query']('', '
		SELECT ' . $query['columns'] . '
		FROM ' . $query['sources'] . '
		ORDER BY mem.date_registered DESC
		LIMIT {int:this_limit}',
		array(
			'this_limit' => $num_stats
		)
	);
	while ($row = $smcFunc['db_fetch_assoc']($request))
	{
		$row['online_color'] = !isset($row['online_color']) ? '' : $row['online_color'];
		$latest_members[$row['id_member']] = array(
			'link' => topxstats_format_link($row['id_member'], $row['real_name'], $row['online_color']),
			'datetime_registered' => timeformat($row['date_registered']
			),
		);
	}	
	$smcFunc['db_free_result']($request);
	return $latest_members;
}

function topxstats_top_posters($num_stats, $show_color = false)
{

	global $smcFunc;
	$top_gracias = array();
	$query = array(
		'columns' => 'mem.id_member, mem.real_name, mem.posts, mem.thank_you_post_became',
		'sources' => '{db_prefix}members AS mem',
		'where' => 'mem.thank_you_post_became >= {int:one}'
	);
	if ($show_color === true)
	{
		$query['columns'] .= ', mgroup.online_color';
		$query['sources'] .= ' LEFT JOIN {db_prefix}membergroups AS mgroup ON (mgroup.id_group = mem.id_group)';
	}
	
	$top_posters = array();
	$query = array(
		'columns' => 'mem.id_member, mem.real_name, mem.posts, mem.thank_you_post_became',
		'sources' => '{db_prefix}members AS mem',
		'where' => 'mem.posts >= {int:one}'
	);
	if ($show_color === true)
	{
		$query['columns'] .= ', mgroup.online_color';
		$query['sources'] .= ' LEFT JOIN {db_prefix}membergroups AS mgroup ON (mgroup.id_group = mem.id_group)';
	}

	$request = $smcFunc['db_query']('', '
		SELECT ' . $query['columns'] . '
		FROM ' . $query['sources'] . '
		WHERE ' . $query['where'] . '
		ORDER BY mem.posts DESC
		LIMIT {int:this_limit}',

		array(
			'this_limit' => $num_stats,
			'one' => 1
		)
	);

	$request = $smcFunc['db_query']('', '
		SELECT ' . $query['columns'] . '
		FROM ' . $query['sources'] . '
		WHERE ' . $query['where'] . '
		ORDER BY mem.thank_you_post_became DESC
		LIMIT {int:this_limit}',
		array(
			'this_limit' => $num_stats,
			'one' => 1
		)
	);
	
	$top_posters = array();
	$query = array(
		'columns' => 'mem.id_member, mem.real_name, mem.posts',
		'sources' => '{db_prefix}members AS mem',
		'where' => 'mem.posts >= {int:one}'
	);
	if ($show_color === true)
	{
		$query['columns'] .= ', mgroup.online_color';
		$query['sources'] .= ' LEFT JOIN {db_prefix}membergroups AS mgroup ON (mgroup.id_group = mem.id_group)';
	}
	$request = $smcFunc['db_query']('', '
		SELECT ' . $query['columns'] . '
		FROM ' . $query['sources'] . '
		WHERE ' . $query['where'] . '
		ORDER BY mem.posts DESC
		LIMIT {int:this_limit}',
		array(
			'this_limit' => $num_stats,
			'one' => 1
		)
	);
		
	while ($row = $smcFunc['db_fetch_assoc']($request))
	{
		$row['online_color'] = !isset($row['online_color']) ? '' : $row['online_color'];
		$top_posters[$row['id_member']] = array(
			'link' => topxstats_format_link($row['id_member'], $row['real_name'], $row['online_color']),
			'gracias' => $row['thank_you_post_became'],
			'posts' => $row['posts']		
		);
	}
	$smcFunc['db_free_result']($request);
	return $top_posters;
}
	
function topxstats_stats_sum($latest_members = 0, $latest_posts = 0, $top_gracias = 0, $top_posters = 0)
{
	return (count($latest_members) + count($latest_posts) + count($top_gracias) + count($top_posters));
}

function topxstats_format_link($mem_id, $real_name, $group_color = null, $target = 'self')
{
	global $scripturl;
	return '<a href="' . $scripturl . '?action=profile;u=' . $mem_id . '" target="_' . $target . '" title="' . $real_name . '"' . (!empty($group_color) ? ' style="color: ' . $group_color . ';"' : '') . '>' . shorten_subject($real_name, 16) . '</a>';
}

PIRELA

#4
Cita de: Rock Lee en 19 Octubre de 2021, 20:53
Tengo ver los mods convinados como cargan los datos en la DB entonces debe ser el llamado le estoy errando donde lo guarda, ¿es el Top X Stats? y ¿Cual es el de gracias? por como ahi varios cambia algo del codigo.


Saludos Familia!




No lo probe pero usando la logica y comparandolo contra el original deberia funcionar... o si te marca error mirar el registro de errores debe mostrarte algo:

<?php
/**
 * Top X Stats (topxstats_)
 *
 * @file ./topxstats_source/resources/main_requests.php
 * @author Labradoodle-360 <>
 * @copyright Matthew Kerle, 2013
 *
 * @version 1.0.1
 */

if (!defined('SMF'))
	die('Hacking attempt...');

function topxstats_latest_members($num_stats, $show_color = false)
{
	global $smcFunc;
	$latest_members = array();
	$query = array(
		'columns' => 'mem.id_member, mem.real_name, mem.posts, mem.date_registered',
		'sources' => '{db_prefix}members AS mem'
	);
	if ($show_color === true)
	{
		$query['columns'] .= ', mgroup.online_color';
		$query['sources'] .= ' LEFT JOIN {db_prefix}membergroups AS mgroup ON (mgroup.id_group = mem.id_group)';
	}
	$request = $smcFunc['db_query']('', '
		SELECT ' . $query['columns'] . '
		FROM ' . $query['sources'] . '
		ORDER BY mem.date_registered DESC
		LIMIT {int:this_limit}',
		array(
			'this_limit' => $num_stats
		)
	);
	while ($row = $smcFunc['db_fetch_assoc']($request))
	{
		$row['online_color'] = !isset($row['online_color']) ? '' : $row['online_color'];
		$latest_members[$row['id_member']] = array(
			'link' => topxstats_format_link($row['id_member'], $row['real_name'], $row['online_color']),
			'datetime_registered' => timeformat($row['date_registered']
			),
		);
	}	
	$smcFunc['db_free_result']($request);
	return $latest_members;
}

function topxstats_top_posters($num_stats, $show_color = false)
{

	global $smcFunc;
	$top_gracias = array();
	$query = array(
		'columns' => 'mem.id_member, mem.real_name, mem.posts, mem.thank_you_post_became',
		'sources' => '{db_prefix}members AS mem',
		'where' => 'mem.thank_you_post_became >= {int:one}'
	);
	if ($show_color === true)
	{
		$query['columns'] .= ', mgroup.online_color';
		$query['sources'] .= ' LEFT JOIN {db_prefix}membergroups AS mgroup ON (mgroup.id_group = mem.id_group)';
	}
	
	$top_posters = array();
	$query = array(
		'columns' => 'mem.id_member, mem.real_name, mem.posts, mem.thank_you_post_became',
		'sources' => '{db_prefix}members AS mem',
		'where' => 'mem.posts >= {int:one}'
	);
	if ($show_color === true)
	{
		$query['columns'] .= ', mgroup.online_color';
		$query['sources'] .= ' LEFT JOIN {db_prefix}membergroups AS mgroup ON (mgroup.id_group = mem.id_group)';
	}

	$request = $smcFunc['db_query']('', '
		SELECT ' . $query['columns'] . '
		FROM ' . $query['sources'] . '
		WHERE ' . $query['where'] . '
		ORDER BY mem.posts DESC
		LIMIT {int:this_limit}',

		array(
			'this_limit' => $num_stats,
			'one' => 1
		)
	);

	$request = $smcFunc['db_query']('', '
		SELECT ' . $query['columns'] . '
		FROM ' . $query['sources'] . '
		WHERE ' . $query['where'] . '
		ORDER BY mem.thank_you_post_became DESC
		LIMIT {int:this_limit}',
		array(
			'this_limit' => $num_stats,
			'one' => 1
		)
	);
	
	$top_posters = array();
	$query = array(
		'columns' => 'mem.id_member, mem.real_name, mem.posts',
		'sources' => '{db_prefix}members AS mem',
		'where' => 'mem.posts >= {int:one}'
	);
	if ($show_color === true)
	{
		$query['columns'] .= ', mgroup.online_color';
		$query['sources'] .= ' LEFT JOIN {db_prefix}membergroups AS mgroup ON (mgroup.id_group = mem.id_group)';
	}
	$request = $smcFunc['db_query']('', '
		SELECT ' . $query['columns'] . '
		FROM ' . $query['sources'] . '
		WHERE ' . $query['where'] . '
		ORDER BY mem.posts DESC
		LIMIT {int:this_limit}',
		array(
			'this_limit' => $num_stats,
			'one' => 1
		)
	);
		
	while ($row = $smcFunc['db_fetch_assoc']($request))
	{
		$row['online_color'] = !isset($row['online_color']) ? '' : $row['online_color'];
		$top_posters[$row['id_member']] = array(
			'link' => topxstats_format_link($row['id_member'], $row['real_name'], $row['online_color']),
			'gracias' => $row['thank_you_post_became'],
			'posts' => $row['posts']		
		);
	}
	$smcFunc['db_free_result']($request);
	return $top_posters;
}
	
function topxstats_stats_sum($latest_members = 0, $latest_posts = 0, $top_gracias = 0, $top_posters = 0)
{
	return (count($latest_members) + count($latest_posts) + count($top_gracias) + count($top_posters));
}

function topxstats_format_link($mem_id, $real_name, $group_color = null, $target = 'self')
{
	global $scripturl;
	return '<a href="' . $scripturl . '?action=profile;u=' . $mem_id . '" target="_' . $target . '" title="' . $real_name . '"' . (!empty($group_color) ? ' style="color: ' . $group_color . ';"' : '') . '>' . shorten_subject($real_name, 16) . '</a>';
}


los mods son el top x stats y el thank of matic que estan aportados aqui en el foro se que los gracias se guardan en la columna thank_you_post_became de la tabla smfmembers la cual esta en la db del foro

Tema unido automáticamente » 20 Octubre de 2021, 09:03

acabo de revisar el log de errores el cual me arroja esto

The database value you're trying to insert does not exist: one
Function: topxstats_top_postersAplicar filtro: Solamente muestra los errores de este archivoArchivo: /home/forogamers/public_html/Sources/topxstats_source/resources/main_requests.php
Línea: 89

segun la linea 89 es esta

78:		$request = $smcFunc['db_query']('', '
79:			SELECT ' . $query['columns'] . '
80:			FROM ' . $query['sources'] . '
81:			WHERE ' . $query['where'] . '
82:			ORDER BY mem.posts DESC
83:			LIMIT {int:this_limit}',
84:	
85:			array(
86:				'this_limit' => $num_stats,
87:				'one' => 1
88:			)
==>89:		);


en realidad no se que error es el que lo esta causando ya que segun el editor de codigo de cpanel asi es que tiene que ir para que no me de errores si quito el ); el foro se desordena todo y no deja hacer nada podrias revisar bien eso lee? ver que puedo poner o como debo poner para que no me de error ya que segun el logs son datos que supuestamente no existen en la db del foro cuando en realidad si estam

Rock Lee

#5
Estuve haciendo algunas pruebas pero con el código me dejaste no me muestra nada, hice algunas pruebas pero tuve modificar los demas archivos. ¿Solo ese archivo estas modificando? puede ahi este el problema no te muestre pero que al usar el código dejaste mas arriba me da ese problema... va el problema es la consulta en si mismo por eso tengo hacer mas pruebas!


Saludos Familia!

PIRELA

Cita de: Rock Lee en 21 Octubre de 2021, 10:47
Estuve haciendo algunas pruebas pero con el código me dejaste no me muestra nada, hice algunas pruebas pero tuve modificar los demas archivos. ¿Solo ese archivo estas modificando? puede ahi este el problema no te muestre pero que al usar el código dejaste mas arriba me da ese problema... va el problema es la consulta en si mismo por eso tengo hacer mas pruebas!


Saludos Familia!

ya lo solucione lee efectivamente eran las consultas y otros detalles que pase por alto en el codigo, pero ya tengo el mods 100% funcional, eh comprimido todo en un zip con su autoinstalable para smf, el que quiera dicho mod con el top gracias llegarme al privado y cordinamos precios. Gracias por la ayuda lee

Rock Lee

Ah entonces era el tema de la consulta, si despues probar el sabado tambien logre conseguirlo aunque use otra manera experimental :P ... paso a marcar como solucionado esto!


Saludos Familia!

Temas Similares (5)