Besoin d'améliorer le "new" en page d'accueil

Started by lucy453, August 04, 2013, 08:31:09 AM

Previous topic - Next topic

maximus23

#40
Bonjour,

Je teste cela dès que j'ai un moment :)

Edit :

Voilà c'est en production sur divers sites et les retours sont très bons.

Pas de soucis pour les sections et sous-sections.

Pas de latence sur de gros forums. Mutualisés et dédiés les deux testés.

Pas de problèmes sur les messages à approuver (sans mods qui le modifie).

Pas de problèmes avec les fonction Messages lus et Non lus.

Pas de problèmes si on lis ses messages via les réponses aux messages et Messages depuis votre dernière visite.

Réponse aux messages en laissant des messages non lus (bug résolu).



Voilà pour le moment les retours reçus.
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

maximus23

#41
Je vous remets le code complet pour une meilleure compréhension cela évitera des erreurs. Faites bien attention à la syntaxe et merci à DeathSign pour le temps passé sur cette modification :)


Editer Sources/Display.php
Chercher et supprimer (ou commenter) :

Edit Sources/Display.php
Search and Delete or writing multiple line comments. The multiple line PHP comment begins with " /* " and ends with " */ ".



        // Mark board as seen if we came using last post link from BoardIndex. (or other places...)
        if (isset($_REQUEST['boardseen']))
        {
            $smcFunc['db_insert']('replace',
                '{db_prefix}log_boards',
                array('id_msg' => 'int', 'id_member' => 'int', 'id_board' => 'int'),
                array($modSettings['maxMsgID'], $user_info['id'], $board),
                array('id_member', 'id_board')
            );
        }

       



Editer Sources MessageIndex.php
Rechercher pour supprimer (ou commenter) :

Edit Sources/MessageIndex.php
Search and Delete or writing multiple line comments. The multiple line PHP comment begins with " /* " and ends with " */ ".


        $smcFunc['db_insert']('replace',
            '{db_prefix}log_boards',
            array('id_msg' => 'int', 'id_member' => 'int', 'id_board' => 'int'),
            array($modSettings['maxMsgID'], $user_info['id'], $board),
            array('id_member', 'id_board')
        );

        if (!empty($board_info['parent_boards']))
        {
            $smcFunc['db_query']('', '
                UPDATE {db_prefix}log_boards
                SET id_msg = {int:id_msg}
                WHERE id_member = {int:current_member}
                    AND id_board IN ({array_int:board_list})',
                array(
                    'current_member' => $user_info['id'],
                    'board_list' => array_keys($board_info['parent_boards']),
                    'id_msg' => $modSettings['maxMsgID'],
                )
            );

            // We've seen all these boards now!
            foreach ($board_info['parent_boards'] as $k => $dummy)
                if (isset($_SESSION['topicseen_cache'][$k]))
                    unset($_SESSION['topicseen_cache'][$k]);
        }

        if (isset($_SESSION['topicseen_cache'][$board]))
            unset($_SESSION['topicseen_cache'][$board]);


Chercher :

Search :


    $boardIndexOptions = array(
        'include_categories' => false,
        'base_level' => $board_info['child_level'] + 1,
        'parent_id' => $board_info['id'],
        'set_latest_post' => false,
        'countChildPosts' => !empty($modSettings['countChildPosts']),
    );
    $context['boards'] = getBoardIndex($boardIndexOptions);


Ajouter Après :

Add After :


    // BEGIN - topic 508952
    changeSectionReadIcon($context['boards'], true);
    // END - topic 508952

   



Editer Sources/Subs-BoardIndex.php
Chercher la fin de fichier :

Edit Sources/Subs-BoardIndex.php
search position="end" :

?>

Ajouter Avant :

Add Before :


// BEGIN - topic 508952
function changeSectionReadIcon(&$mycontext, $isSub = false)
{
    global $user_info, $modSettings, $smcFunc;

    if ($user_info['is_guest'] || empty($mycontext))
        return;

    // Some workaround to make the function a little more generic...
    if ($isSub)
        $categories = array(array('boards' => &$mycontext));
    else
        $categories = &$mycontext;

    // Make a list of boards to check
    $unreadboards = array();
    foreach ($categories as $cat_id => $cat)
    {
        foreach ($cat['boards'] as $board_id => $board)
        {
            if (!empty($modSettings['recycle_enable']) && $board['id'] == $modSettings['recycle_board']) // Don't notify for the recycle bin
                $categories[$cat_id]['boards'][$board_id]['new'] = 0;
            else
                $unreadboards[$board['id']] = 0;

            foreach ($board['children'] as $child_id => $child)
            {
                if (!empty($modSettings['recycle_enable']) && $child['id'] == $modSettings['recycle_board'])
                    $categories[$cat_id]['boards'][$board_id]['children'][$child_id]['new'] = 0;
                else
                    $unreadboards[$child['id']] = 0;
            }
        }
    }

    // Get the real number of unread topics by boards
    $request = $smcFunc['db_query']('', '
        SELECT t.id_board, COUNT(*) AS num_topics
        FROM {db_prefix}topics AS t
            LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = t.id_topic AND lt.id_member = {int:current_member})
            LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = t.id_board AND lmr.id_member = {int:current_member})
        WHERE t.id_board IN ({array_int:boards})
            AND IFNULL(lt.id_msg, IFNULL(lmr.id_msg, 0)) < t.id_last_msg' . ($modSettings['postmod_active'] ? '
            AND t.approved = {int:is_approved}' : '') . '
        GROUP BY t.id_board',
        array(
            'boards' => array_keys($unreadboards),
            'current_member' => $user_info['id'],
            'is_approved' => 1,
        )
    );

    while ($row = $smcFunc['db_fetch_assoc']($request))
        $unreadboards[$row['id_board']] = $row['num_topics'];
    $smcFunc['db_free_result']($request);

    foreach ($categories as $cat_id => $cat)
    {
        foreach ($cat['boards'] as $board_id => $board)
        {
            $childrenHasNew = 0;

            // Women and children first!
            foreach ($board['children'] as $child_id => $child)
            {
                if (!isset($unreadboards[$child['id']]))
                    continue;

                // No new topic but board marked as new? Correct it.
                if (empty($unreadboards[$child['id']]) && !empty($child['new']))
                {
                    $smcFunc['db_insert']('replace',
                        '{db_prefix}log_boards',
                        array('id_msg' => 'int', 'id_member' => 'int', 'id_board' => 'int'),
                        array($modSettings['maxMsgID'], $user_info['id'], $child['id']),
                        array('id_member', 'id_board')
                    );

                    // Update for the current session
                    $categories[$cat_id]['boards'][$board_id]['children'][$child_id]['new'] = 0;
                }

                $childrenHasNew += $unreadboards[$child['id']];
            }

            if (!isset($unreadboards[$board['id']]))
                continue;

            // No new topic here and in children section but not marked as read? Do sth
            if (empty($unreadboards[$board['id']]) && empty($childrenHasNew) && (!empty($board['new']) || !empty($board['children_new'])))
            {
                $smcFunc['db_insert']('replace',
                    '{db_prefix}log_boards',
                    array('id_msg' => 'int', 'id_member' => 'int', 'id_board' => 'int'),
                    array($modSettings['maxMsgID'], $user_info['id'], $board['id']),
                    array('id_member', 'id_board')
                );

                $categories[$cat_id]['boards'][$board_id]['new'] = 0;
                $categories[$cat_id]['boards'][$board_id]['children_new'] = 0;
            }
            // New topics just in children?
            elseif (empty($unreadboards[$board['id']]) && !empty($childrenHasNew) && (!empty($board['new']) || empty($board['children_new'])))
            {
                $smcFunc['db_insert']('replace',
                    '{db_prefix}log_boards',
                    array('id_msg' => 'int', 'id_member' => 'int', 'id_board' => 'int'),
                    array($modSettings['maxMsgID'], $user_info['id'], $board['id']),
                    array('id_member', 'id_board')
                );

                $categories[$cat_id]['boards'][$board_id]['new'] = 0;
                $categories[$cat_id]['boards'][$board_id]['children_new'] = 1;
            }           
            // Some topic in it but not marked as new? Ok but we can't update the db due to a weird behavior...
            elseif (!empty($unreadboards[$board['id']]) && empty($board['new']))
                $categories[$cat_id]['boards'][$board_id]['new'] = 1;
        }
    }
}
// END - topic 508952





Editer Sources/BoardIndex.php
Chercher :

Edit Sources/BoardIndex.php
Search :


    // Retrieve the categories and boards.
    require_once($sourcedir . '/Subs-BoardIndex.php');
    $boardIndexOptions = array(
        'include_categories' => true,
        'base_level' => 0,
        'parent_id' => 0,
        'set_latest_post' => true,
        'countChildPosts' => !empty($modSettings['countChildPosts']),
    );
    $context['categories'] = getBoardIndex($boardIndexOptions);


Ajouter Après :

Add After :


    // BEGIN - topic 508952
    changeSectionReadIcon($context['categories'], false);
    // END - topic 508952






Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

DeathSign

Les retours sont rapides chez toi ^^

Si tu connais des mods qui pourraient être perturbés par ces modifs, je suis preneur pour tester ;)

En tout cas, je n'aurais jamais passé autant de temps pour des modifs sur un topic ici ^^'


maximus23

Bonjour,

Tout fonctionne sans le moindre problème jusque maintenant et rien à signaler sur les forums programmés sur mesure.

:)
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

Web68

Bonjour,
de retour de vacances je vais refaire un test chez moi... MERCI
LIBERTE EGALITE FRATERNITE

Web68

Bonjour,
Maximus tu peux confirmer c'est bien le fichier
MessageIndex.php et pas MessagesIndex.php il y a les deux dans ton post ?

Merci
LIBERTE EGALITE FRATERNITE

Web68

Je ne trouve pas
$smcFunc['db_insert']('replace',
            '{db_prefix}log_boards',
            array('id_msg' => 'int', 'id_member' => 'int', 'id_board' => 'int'),
            array($modSettings['maxMsgID'], $user_info['id'], $board),
            array('id_member', 'id_board')
        );

        if (!empty($board_info['parent_boards']))
        {
            $smcFunc['db_query']('', '
                UPDATE {db_prefix}log_boards
                SET id_msg = {int:id_msg}
                WHERE id_member = {int:current_member}
                    AND id_board IN ({array_int:board_list})',
                array(
                    'current_member' => $user_info['id'],
                    'board_list' => array_keys($board_info['parent_boards']),
                    'id_msg' => $modSettings['maxMsgID'],
                )
            );

            // We've seen all these boards now!
            foreach ($board_info['parent_boards'] as $k => $dummy)
                if (isset($_SESSION['topicseen_cache'][$k]))
                    unset($_SESSION['topicseen_cache'][$k]);
        }

        if (isset($_SESSION['topicseen_cache'][$board]))
            unset($_SESSION['topicseen_cache'][$board]);
LIBERTE EGALITE FRATERNITE

Zuki.

Bonjour,

C'est dans ./Sources/MessageIndex.php

Ligne 140 (Fichier originel) => $smcFunc['db_insert']('replace',


Web68

ok je vais télécharger le fichier d'origine pour comprendre merci à toi
LIBERTE EGALITE FRATERNITE

DeathSign

C'est normal tu l'avais déjà supprimé... Maximus a résumé toutes les modifs depuis une nouvelle install dans son post.

Reprend mon post qui part du cas où tu as appliqué les précédentes http://www.simplemachines.org/community/index.php?topic=508952.msg3616419#msg3616419 (faut tout lire donc remettre Sources/BoardIndex.php comme avant)

Et en effet il y avait une faute de frappe dans MessageIndex

EDIT : Me suis permis de supprimer la ligne MessageIndex erronée et en trop sur le post de Maximus

maximus23

Bonjour,

Pas de soucis DeathSign tu as très bien fait merci à toi :)

Rien à signaler tout roule impeccablement sur tout les forums et ils sont très content :)
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

Web68

Non je  rien changé car des erreurs étaient apparues... mais je ne suis pas avec un fichier d'origine je pense donc pas possible pour moi... c'est peut etre un mod qui me change le fichier...

ligne 141 j'ai dans mon fichier
if (isset($_SESSION['topicseen_cache'][$board]))
unset($_SESSION['topicseen_cache'][$board]);

$request = $smcFunc['db_query']('', '
SELECT sent
FROM {db_prefix}log_notify
WHERE id_board = {int:current_board}
AND id_member = {int:current_member}
LIMIT 1',
array(
'current_board' => $board,
'current_member' => $user_info['id'],
)
);
$context['is_marked_notify'] = $smcFunc['db_num_rows']($request) != 0;
if ($context['is_marked_notify'])
{
list ($sent) = $smcFunc['db_fetch_row']($request);
if (!empty($sent))
{
$smcFunc['db_query']('', '
UPDATE {db_prefix}log_notify
SET sent = {int:is_sent}
WHERE id_board = {int:current_board}
AND id_member = {int:current_member}',
array(
'current_board' => $board,
'current_member' => $user_info['id'],
'is_sent' => 0,
)
);
}

Content pour ceux qui pourront l'utiliser et bon boulot si Maximus dit pas de problème c'est que c'est bon...
Bon week
LIBERTE EGALITE FRATERNITE

maximus23

Bonjour,

Mets ton fichier en attache que l'on regarde cela :)



Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

Web68

Merci si tu peux juste me dire si c'est une grosse modif ou pas....  ;)
LIBERTE EGALITE FRATERNITE

maximus23

Bonjour,

Voilà corrigé :)
Tu dois faire attention quand tu retires des morceaux de code il vaut mieux les commenter que de les supprimer tu t'y retrouverais beaucoup mieux :)

Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

Web68

ok merci et ok pour le conseil  ;)
si on install un mod il supprime ou commente le code ???

bonne journée
LIBERTE EGALITE FRATERNITE

maximus23

Bonjour,

Et alors tu as su tout installer correctement ?

Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

Web68

install nickel ! ;) pas de bug lors de la mise en ligne
encore merci à tous les deux

maintenant je test tout mais bon si vous avez fait les test c'est du 100%
LIBERTE EGALITE FRATERNITE

maximus23

Bonsoir,

Tu peux quand même donner ton avis car avec certains mods on a parfois des surprises.

:)
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

Web68

exact ! pour l'instant aucun souci ... si jamais je reviendrai ... :P

mods en place:
MetaTags Modification
Float BBCODE
Separated Birthdays from Events
Age And Location
Users Online Today
Sitemap
View Voters at Polls
Ad Managment
InLine Attachments
Only count members in stats
AjaxChat Integration
Tapatalk SMF 2.0 RC5/Final plugin
Aeva Media
Online status on login
Simple Audio Video Embedder
LIBERTE EGALITE FRATERNITE

Advertisement: