DESCRIPCIÓN DEL PROBLEMA A SOLUCIONARPrimeramente comentar que estos cambios los he hecho sobre mi foro en su versión SMF 2.0.3 Tras actualizar mi foro, observé que en determinados foros en los que a su vez había varios niveles de subforos por debajo de él, los posts escritos en estos últimos no aparecían en el total de dicho foro. Lo ilustro con una imagen de mi foro:
Show content
En ambos foros, existen distintos niveles de subforos como por ejemplo esto:
Foro dedicado a X tema
----Subforo 1 (subforo del anterior Foro)
---------Subforo A (subforo de subforo 1)
--------------Subforo a (subforo de subforo A)
El problema es que aunque en las opciones de administración hayamos marcado lo de
"Contar mensajes hijos en totales de padre"
Administración > Manejar Foros y Categorías > Configuración > Contar mensajes hijos en totales de padres.Seguía sin aparecer el total de posts de toda esa sección del foro.
Por defecto, SMF solo contabiliza los posts escritos en el foro principal y en el primer nivel de Subforo de este, es decir, los mensajes escritos en
Foro dedicado a X tema
----Subforo 1 (subforo del anterior Foro)---------Subforo A (subforo de subforo 1)
--------------Subforo a (subforo de subforo A)
Pero los mensajes escritos en los otros dos niveles inferiores de subforo no.
Del mismo modo, cuando escribes un posts en dichos niveles inferiores de subforos, ese mensaje tampoco aparecía en el indice general como "último post escrito". Aparece que hay nuevo mensaje, pero no indicaba que ese era el último post (por eso puse una flechita en rojo arriba indicando el último post)
Tras todo esto pasa a explicar como solucionar esto, ya que era necesario explicar lo anterior porque será distinto para cada caso
HACER QUE SE CONTABILICEN TODOS LOS MENSAJESEs relativamente sencillo:
Y aquí viene el por qué de la explicación de antes. Debemos saber cuantos niveles de subforos tenemos en nuestro foro. En mi caso como puse antes tengo 3 niveles de subforos
----Subforo 1 (subforo del anterior Foro)[/b]
---------Subforo A (subforo de subforo 1)
--------------Subforo a (subforo de subforo A)
Por tanto en mi caso sería así
Vamos al archivo:
Sources/
Subs-BoardIndex.phpBuscamos:
AND b.child_level BETWEEN ' . $boardIndexOptions['base_level'] . ' AND ' . ($boardIndexOptions['base_level'] + 1)),
Reemplazamos:
AND b.child_level BETWEEN ' . $boardIndexOptions['base_level'] . ' AND ' . ($boardIndexOptions['base_level'] + 3)),
Si tuvierais 2 niveles sólamente pues reemplazais por
AND b.child_level BETWEEN ' . $boardIndexOptions['base_level'] . ' AND ' . ($boardIndexOptions['base_level'] + 2)),Tan sólo varía ese numerito en rojo. Si fueran 4 niveles, pues un 4, etc. Por defecto SMF como digo sólo lee el nº de posts del primer nivel de subforo
Con esto ya conseguiríamos que se muestren todos los mensajes de una sección en el indice general del foro.
NOTA: El total de posts del foro que se muestra en el área de información ese es siempre correcto. Esto no interfiere para nada, se refiere solo al nº total de posts de cada sección si esta tiene muchos niveles de subforos.
HACER QUE SE MUESTRE EN EL ÍNDICE GENERAL EL ÚLTIMO POST PUBLICADO, SI ESTE LO HA SIDO EN UN SUBFORO DE BAJO NIVELDel mismo modo que antes, cualquier post publicado en dichos niveles inferiores de subforo, no aparecerá nunca como "último post escrito" en el índice general de esa sección.
Para solucionar esto vamos al archivo:
Sources/
Subs-BoardIndex.phpBuscamos
if (isset($parent_map[$row_board['id_parent']]) && !$row_board['is_redirect'])
{
$parent_map[$row_board['id_parent']][0]['posts'] += $row_board['num_posts'];
$parent_map[$row_board['id_parent']][0]['topics'] += $row_board['num_topics'];
$parent_map[$row_board['id_parent']][1]['posts'] += $row_board['num_posts'];
$parent_map[$row_board['id_parent']][1]['topics'] += $row_board['num_topics'];
Reemplazamos por:
if (isset($parent_map[$row_board['id_parent']]) && !$row_board['is_redirect'])
{
$parent_map[$row_board['id_parent']][0]['posts'] += $row_board['num_posts'];
$parent_map[$row_board['id_parent']][0]['topics'] += $row_board['num_topics'];
$parent_map[$row_board['id_parent']][1]['posts'] += $row_board['num_posts'];
$parent_map[$row_board['id_parent']][1]['topics'] += $row_board['num_topics'];
/** added by FH in order to also show last posts of grand children at board index **/
if($parent_map[$row_board['id_parent']][0]['last_post']['timestamp'] < forum_time(true, $row_board['poster_time'])) {
censorText($row_board['subject']);
$row_board['short_subject'] = shorten_subject($row_board['subject'], 24);
$this_last_post = array(
'id' => $row_board['id_msg'],
'time' => $row_board['poster_time'] > 0 ? timeformat($row_board['poster_time']) : $txt['not_applicable'],
'timestamp' => forum_time(true, $row_board['poster_time']),
'subject' => $row_board['short_subject'],
'member' => array(
'id' => $row_board['id_member'],
'username' => $row_board['poster_name'] != '' ? $row_board['poster_name'] : $txt['not_applicable'],
'name' => $row_board['real_name'],
'href' => $row_board['poster_name'] != '' && !empty($row_board['id_member']) ? $scripturl . '?action=profile;u=' . $row_board['id_member'] : '',
'link' => $row_board['poster_name'] != '' ? (!empty($row_board['id_member']) ? '<a href="' . $scripturl . '?action=profile;u=' . $row_board['id_member'] . '">' . $row_board['real_name'] . '</a>' : $row_board['real_name']) : $txt['not_applicable'],
),
'start' => 'msg' . $row_board['new_from'],
'topic' => $row_board['id_topic']
);
// Provide the href and link.
if ($row_board['subject'] != '')
{
$this_last_post['href'] = $scripturl . '?topic=' . $row_board['id_topic'] . '.msg' . ($user_info['is_guest'] ? $row_board['id_msg'] : $row_board['new_from']) . (empty($row_board['is_read']) ? ';boardseen' : '') . '#new';
$this_last_post['link'] = '<a href="' . $this_last_post['href'] . '" title="' . $row_board['subject'] . '">' . $row_board['short_subject'] . '</a>';
}
else
{
$this_last_post['href'] = '';
$this_last_post['link'] = $txt['not_applicable'];
}
$parent_map[$row_board['id_parent']][0]['last_post'] = $this_last_post;
}
/** end **/
Y listo, ya nos mostrará dichos mensajes.
Pero mejor muestro con imágenes como queda todo tras estos 2 cambios:
ANTESDESPUÉSFijaos que además de contabilizar ya correctamente todos los posts de cada Foro (arriba 7500 y algo y abajo ya los 30.000 y pico), ahora también muestra los últimos mensajes escritos incluso en los subforos de nivel más bajo.
Cualquier duda pregunten