Bonjour,
Je ne ferai pas de cette façon.
Tout d'abord c'est important de savoir quel est le module utilisé pour "afficher les news et autres infos inédites". A mon avis, c'est ce module ou cet ensemble de modules qu'il faut modifier. Cela te permettra de jouer avec les éléments du contexte alimenté par le module lui même sans avoir à développer trop de choses. Tu peux ensuite générer le schéma de données liées au module (la lecture du SqlDataProvider lié au module donnera de bonnes infos), et insérer dedans les tables/colonnes nécessaires à ton projet.
Cela serait basé sur le système suivant, déclenché par l'évenement Page_load d'un contrôle du module de news en question.
objVisibilityCheckerController.UpdateView(NewsID*, UserID, Me.Date.now)
*NewsID, ou CategoryID, ou NewsDetailsID ... suivant le module et le contrôle qui lance la mise à jour du TimeStamp.
De ce fait, tu sais, pour un utilisateur donné, quelles sont les news qui ont été chargées. Attention toutefois, une news chargée ne signifie pas une news lue ! Surtout si celle-ci se trouve dans une liste ou dans une page complexe. On peut ainsi ajouter un degré de certitude de lecture, nommons le boolSurementLu. Pour le cas de NewsArticles par exemple, on placera boolSurementLu à True sur le contrôle qui affiche le détail de l'article.
Ce qui donnera :
- Lorsqu'on affiche une news en liste :
objVisibilityCheckerController.UpdateView(NewsID*, UserID, Me.Date.now, False)
- Lorsqu'on passe en mode détail :
objVisibilityCheckerController.UpdateView(NewsID*, UserID, Me.Date.now, True)
Ensuite tu détermines un booléen qui détermine l'affichage de la news, dans un algo du genre :
- Est-ce que la news a une date de publication suffisament récente ?
- Est-ce que l'utilisateur a déjà vu cette news ?
- Est-ce qu'il l'a déjà vu en détail ?
Il te faudra jouer du cache judicieusement, car ces fonctions risquent d'être appelées très souvent.
Je n'ai pas plus de temps, mais je lirai les réponses de ce thread si d'autres veulent engager la réflexion.
seb