News:

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

Main Menu

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

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

Previous topic - Next topic

lucy453

Bonjour à tous,

Je viens encore solliciter votre aide  :-[

En page d'accueil, a gauche de chaque rubrique, SMF propose d'avoir une image différente suivant si il y a de nouveaux posts ou non dans la rubrique.
Le soucis est que l'image "new" disparait des qu'on a cliqué sur la rubrique, même si il y a plusieurs topics non lus encore à l'intérieur.

J'ai ouvert il y a un mois et les membres continuent de me dire que ça pose de réel problème et que ça leur ai désagréable. (J'avoue que je loupe aussi des conversations pour les mêmes raisons)

Ca fait 2 semaines que j'essaye en vain de modifier cela. j'ai vu des topics en parler et un changement de code qui permet de toujours laisser en "non lu", tant qu'on a pas cliqué sur "marquer comme lu"... le soucis c'est que cette modification empêche la rubrique de revenir en "new" lorsqu'il y a des nouveautés depuis le marquage comme lu fait manuellement.

Est ce que quelqu'un pourrait se pencher sur ce sujet avec moi?
Je vais jamais y arriver sinon et ça m'ennuie de pas réussir a le faire  :-[

J'essaye de reformuler mon "voeu" ^^
Est ce que quelqu'un peut m'aider pour avoir l'image "new" de la page d'accueil qui reste comme telle tant qu'on a pas cliqué sur tous les topics ayant des nouveautés?
Au moins rester en "new" jusqu'à la déconnexion, pas grave si ca ne prend les nouveautés que d'une connexion a l'autre. Ca serait déjà énorme.

Zuki.

Bonjour,

De mémoire un problème dans le même style a été abordé...

Regarde ici : http://www.simplemachines.org/community/index.php?topic=488139.0

Peut-être une solution.

Ce n'est pas l'icône "new" (new.gif) mais plutôt on.gif (on.png suivant thème).


lucy453

Je galère un peu, j'ai essayé la modification et vider les 3 tables, ca n'a pas marché et je n'arrive pas a les remttre, ca me met des erreurs sur certaine table. Du coup quand je clique sur "marquer comme lu" ca me met une erreur database :/

Edit j'ai vidé comme dit les tables: log_boards log mark_read log_topics pour celà simplement les VIDER.

Apres j'avais une erreur, donc j'ai mis la sauvegarde que j'avais faites.. elle est mal passée car maintenant quand je clique sur non lu ca me met:
"The database value you're trying to insert does not exist: id_msg"

Vous pouvez m'aider ou c'est mort? ^^

lucy453

C'est bon j'ai pu changé et ça remarche

Par contre j'ai pas la solution :/
Est ce que je dois poster dans l'autre topic et le remonter plutot que d'écrire ici? Je pense que ce n'est pas top un doublon sur le sujet?

Zuki.

Bonjour,

Pour ce qui est du post, je n'ai pas pouvoir de décision !
Mais à mon avis, comme c'est ton sujet continue ici...



QuotePar contre j'ai pas la solution

Tu veux dire que la modif expliquée ne fonctionne pas ?


lucy453

Non ça ne fonctionne pas. J'ai essayé celle de Maximus qui était en version rapide car il n'avait pas le temps de se pencher dessus.

Lorsque je fais les modifications, je ne dois pas savoir ce que je dois supprimer exactement dans le fichier Sources/MessageIndex.php car je n'ai pas les mêmes écritures que ceux décrites par Maximus. Je suppose que c'est la que j'ai un soucis

Zuki.

Tu n'as pas les mêmes codes, car un mod a surement modifié le fichier. C'est normal.

Il faut regarder avec un fichier MessageIndex.php original. Ensuite tu essayes de trouver l'endroit désigné.

Après il faut tâtonner pour mettre en place.

Pas simple, mais je ne vois que cette solution.


lucy453

Oui c'est bien ça. J'ai trouvé ou est placé se fameux code a enlever.
Je prends ligne par ligne pour voir les différence et essayer de supprimer tout ce qu'il faut mais c'est pas évident.

Je vais essayer sur une copie a part, histoire de pouvoir tenter le coup sans pression.

DeathSign

Pour ne louper aucune discussion moi j'utilisais la fonctionnalité "Show unread posts since last visit." et "Show new replies to your posts." (désolé de pas l'avoir en français ;D). C'est très pratique surtout quand tu es admin/modo d'un forum. Bien sûr au début quand tu arrives t'as intérêt à marquer tous les sujets comme lu, ou alors de tout lire ::)

Ca ne te conviendrait pas ?

On ne m'avait jamais remonté ta remarque personnellement ^^

Amicalement,
DeathSign

Web68

bonjour,

j'avais déjà fait le test avec maximus23 sans succès pour la même demande que toi...

Il faut attendre que quelqu'un se penche sur le sujet

bonne journée
LIBERTE EGALITE FRATERNITE

lucy453

Merci pour vos réponses. Dommage, je ne trouve pas la solution. Et le fait de venir d'un forumactif.. les membres ont l'air de vouloir les fonctionnalités de SMF mais surtout ne pas perdre cette fameuse image qui reste en nouveau jusqu'a ce que tout les topics soient lu

Pour être précise je cherche a ce que l'image reste en nouveau tant qu'on s'est pas déconnecté. Si ca prend les messages non lus d'une connexion a l'autre ça me va.

Y a un endroit sur ce forum ou l'on peut faire une demande mais payante? On ne sait jamais, si quelqu'un voulait s'y lancer pour faire un mod et que c'est dans mes possibilités, j'aimerais bien, j'en ai tellement marre qu'on m'écrive pour ça

Zuki.

#11
Bonjour,

Peut-être une solution de remplacement en attendant...

Réglage dans Profil > Modifier le profil > Notifications et E-mails

Il y a des possibilités pour recevoir une notification => à étudier !  ;)




Edit

Regarde ceci ça correspond un peut à ce que tu cherches => http://custom.simplemachines.org/mods/index.php?mod=3689

Ou bien ici : http://custom.simplemachines.org/mods/index.php?mod=2146

Je n'ai pas testé  :-[


DeathSign

Je lis le désespoir =) Mais forumactif faut pas abuser ^^

Ca doit pas être bien difficile, jme jetterais à l'eau (ou où vous voulez) pendant ce long week-end même si je n'ai pas forcément le temps :s

(ça a pas l'air d'être ça malheureusement Zuki)

Amicalement,
DeathSign

Web68

Bonjour,
on avait déjà bien avancé avec Maximus23, donc je suis bien sur toujours preneur et éventuellement testeur...

merci  ;)
LIBERTE EGALITE FRATERNITE

maximus23

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,

comprend pas l'anglais à ce niveau ..  :( :(


bonne journée
LIBERTE EGALITE FRATERNITE

DeathSign

#16
Pour revenir à ce sujet, c'est pas si évident car SMF n'a pas été conçu dans cette optique là. Il m'a fallut bien plus de temps que prévu mais j'ai cependant réussi à concocter quelque chose qui marcherait bien (sans garantie ni même que ça ne toucherait pas d'autres fonctionnalités/mods !)

La vérification a lieu sur la page qui liste les catégories et sections du forum (boardindex) où je rajoute une requête qui va chercher le nombre de sujet non lu et corriger ensuite les icônes. Si vous utilisez des sous-sections, l'icône d'une sous-section à la page de la section peut être faussée mais sur la page générale (boardindex) elle est bien mise à jour. Je vous laisse le corriger en y rajoutant les vérifs similaires dans MessageIndex. (fait dans la suite des modifications)

D'abord on va retirer le fait que la section soit marquée comme lue juste en cliquant dessus (source) :

Editer Sources/Display.php
Chercher et supprimer (ou commenter) :
// 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
Chercher et supprimer (ou commenter) :
$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]);


Ensuite on va rajouter mes vérifs :

EDIT: Des modifications de cette partie ont eu lieu, la suite se situe dans le message http://www.simplemachines.org/community/index.php?topic=508952.msg3616419#msg3616419


Editer Sources/BoardIndex.php
(à défaire si celles-ci ont été appliquées)
Chercher :
Quotefunction BoardIndex()
{
   global $txt, $user_info, $sourcedir, $modSettings, $context, $settings, $scripturl;
Remplacer par :
Quotefunction BoardIndex()
{
   global $txt, $user_info, $sourcedir, $modSettings, $context, $settings, $scripturl, $smcFunc;

Puis,
Chercher :

Quote   // 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 :

Quote
   // BEGIN - topic 508952
   // Grab all board ids into our array
   $request = $smcFunc['db_query']('', '
      SELECT b.id_board
      FROM {db_prefix}boards AS b
      WHERE ' . $user_info['query_see_board'] . (!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0 ? '
         AND b.id_board != {int:recycle_board}' : ''),
      array(
         'recycle_board' => (int) $modSettings['recycle_board'],
      )
   );
   $unreadboards = array();
   while ($row = $smcFunc['db_fetch_assoc']($request))
      $unreadboards[$row['id_board']] = 0;
   $smcFunc['db_free_result']($request);

   // Don't try to go further if there are no boards =)
   if (!empty($unreadboards))
   {
      // 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 ($context['categories'] as $cat_id => $boards)
      {
         foreach ($boards['boards'] as $board_id => $board)
         {
            // No new topic but board marked as new? Correct it.
            if ($unreadboards[$board['id']] == 0 && !empty($board['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')
               );
               
               // Update for the current session
               $context['categories'][$cat_id]['boards'][$board_id]['new'] = 0;
            }
            
            // Process children too!
            foreach ($board['children'] as $child_id => $child)
            {
               if ($unreadboards[$child['id']] == 0 && !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')
                  );
                  
                  $context['categories'][$cat_id]['boards'][$board_id]['children'][$child_id]['new'] = 0;
               }
            }
         }
      }
   }
   // END - topic 508952

Faites des tests, faites des retours, dites moi et corrigez si vous pouvez =)

Amicalement,
DeathSign

Web68

Bonsoir,
merci pour le boulot ! la je pars en vacances et je ferai bien sur le test et le retour dès que possible

;)
LIBERTE EGALITE FRATERNITE

maximus23

Bonjour,

J'ai testé sur un forum sans sous-sections et là pas de soucis rencontrés. Le seul point est pour les fichiers devant-être approuvés là il y a encore une amélioration à faire sinon pour un forum standard pas de soucis. Tout le monde demande cette modification mais peut de retour pour le travail effectué par notre ami DeathSign.

:)
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

Bonsoir,
très vite testé chez moi et j'ai un message d'erreur syntaxe...  je pars en vacances demain retour dans 15j pas le temps de chercher ce soir... mais mon forum n'est pas très standard comme tu dis maximus !!!  ;)

allez faite vos retours ... il le mérite bien c'est pour nous qu'il bosse dans l'ombre  :P
LIBERTE EGALITE FRATERNITE

Advertisement: