Vous êtes ici Forums
  |  Connexion
 Forums
HomeHomeForums DNNForums DNNDéveloppementDéveloppementConnaitre la date et lConnaitre la date et l'heure de visite d'une page par les utilisateurs
Précédente
 
Suivante
Nouveau message
09/04/2008 15:26
 

Lu,

Je dois développer un module permettant d'afficher les news et autres infos inédites depuis la dernière visite des membres enregistrés...

Pour cela, on a pensé jouer avec les dates, par exemple :

  • Je me suis connecté le 01/04/2008
  • De nouvelles news ont été ajoutées le 02/04/2008
  • Je me reconnecte le 03/04/2008 et mon module "Nouveautés" m'informe uniquement des news ajoutées le 02/04/2008.

Pour suivre ce raisonnement, j'aurai donc besoin de pouvoir récupérer la date courante date quand l'utilisateur va aller sur une page que je veux surveiller. Y'a-t-il un moyen quelconque d'envoyer ce genre d'information pour la stocker dans une table créée à cet effet lors de la visite d'une page surveillée ??

J'ai quelques doutes sur la faisabilité d'une telle chose, mais je me dis que ce n'est pas impossible à voir le module "Where are they" de Ventrian...

Sinon, il reste la possibilité de récupérer da date de dernière connexion stockée dans la table aspnet_Users pour la comparer avec la date de publications des news des pages que je surveille, mais je trouve cette méthode moins fine car dans ce cas on ne tient pas compte du fait que l'utilisateur ait pu aller sur la page en question ou pas.

Si vous avez des conseils et/ou des idées, ne vous privez pas, je ne suis même pas certain d'attaquer le problème du bon côté, mais je ne vois pas trop comment faire autrement sans toucher au reste du code, ce que je ne veux évidemment pas faire pour des raisons d'écrasement et de perte du code lors de mises à jour ultérieures.

Merci à tous.

++

 
Nouveau message
14/04/2008 11:33
 

Lu,

Ayant poursuivi mes investigations pour arriver à une solution, j'envisage de créer une tâche planifiée et de l'ajouter dans le scheduler de DotNetNuke...

Sette tâche planifiée se chargerait de récupérer la liste des utilisateurs présents sur le site au moment où elle est déclenchée suivant les réglages effectués et pour chaque utilisateur de la liste la date et le Module_ID seraient enregistrés dans une table prévue à cet effet.

Pensez vous que l'idée soit bonne ?? Pour arriver à mettre en place cette tâche planifiée, j'ai trouvé un article sur le DotNetNuke Scheduler ici : www.wwwcoder.com/tabid/68/type/art/parentid/224/site/6401/default.aspx et je me sers également du pdf de DotnetNuke : DotNetNuke Scheduling Provider...

Voilà, si vous avez des idées et/ou des remarques, n'hésitez pas à me les faire savoir

++

 
Nouveau message
16/04/2008 11:05
 

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

 

 
Nouveau message
16/04/2008 14:15
 

Lu,

 

Merci Seb pour le temps passé à comprendre le problème et pour ta réponse...

 

En effet une solution serait de modifier le module concerné par la surveillance des nouveaux articles dirons nous... Il s'agit essentiellement de NewsArticles en l'occurrence...  Le problème est qu'on ne voulait pas toucher au code de ce module car il est fréquemment mis à jour... Et qui dit modification du code dit perte de ces modifications lors des mises à jour ou sinon plus de mises à jour possibles... Ce qui n'est pas pratique du point de vue du client...

 

C'est donc pour cela qu'on avait envisagé de créer une tâche planifiée distincte... Après plusieurs séries de test, je m'aperçois que ce n'est pas forcément la bonne solution car je ne trouve pas ça fiable car il y a on dirait un laps de temps entre 2 déclenchements de la tâche planifiée durant lequel plus rien n'est capté, que je sois en mode Timer ou Request...

 

On s'est donc penché sur le côté Asp.net de la chose et j'ai trouvé sur msdn une procédure pour écouter les évènements WMI d'état Asp.net A moins d'avoir mal saisi le but de cet écouteur, je pense que ça pourrait être une solution pour pouvoir capter les évènements Page_Load sans devoir modifier le code des modules concernés par cette écoute. Il resterait à filtrer les modules qu'on désire écouter via leur ModuleId. Je pense que cela doit être possible...

 

J'ai donc suivi la procédure décrite dans msdn : msdn2.microsoft.com/fr-fr/library/ms178713(VS.80).aspx

 

Seul hic, j'ai une erreur visiblement liée au framework :

 

Cet assembly n'autorise pas les appelants d'un niveau de confiance partiel.

 

Voilà l'erreur détaillée :

 

 

J'ai tenté de bidouiller dans la config du framework mais au final je n'ai rien modifié car je n'ai pas trouvé où ni comment assigner un niveau de confiance à un assembly...

 

Voilà un peu où j'en suis... En tout cas mer ci encore Seb pour ce brainstorming, et au passage si quelqu'un à une astuce pour ce problème de confiance, je suis preneur aussi

 

++

 
Nouveau message
17/04/2008 13:01
 

Je pense qu'il s'agit du Full Trust. Recherche Trust dans le web.config et remplace Medium par Full.

Il n'est pas rare de voir Ventrian intégrer le code qu'on lui propose dans ses applis, surtout si l'apport est effectivement interessant. En l'occurence, un module qui afficherai uniquement les infos qu'un utilisateur n'a pas lues serait très interessant. Cela permettrait par la suite de pouvoir faire les mises à jour sans se soucier de la perte des fonctionnalités. Je vous conseille de vous rapprocher de Ventrian à ce sujet car cela me semble être la voie la plus perenne dans l'immédiat. Dans tous les cas, lui exposer votre problématique vous permettra d'avoir un retour interessant de la part du développeur qui a réalisé le programme que vous souhaitez tracker.

Sébastien

 

 
Nouveau message
29/04/2008 14:28
 

Lu,

Merci Seb pour tes remarques une fois de plus. J'ai terminé le module qui par défaut fonctionne en tandem avec News Articles, mais on peut pointer explicitement une table de la base de données correspondant à un autre modules de news... Ou autre chose pourquoi pas...

Pour me sortir de mon pétrain, j'ai tout simplement activé les statistiques du site et j'ai récupéré les logs de la table SiteLogs relatifs à mon utilisateur connecté et au TabId surveillé... A partir de là, terminés les problèmes, j'ai pu arriver là ou je souhaitais, c'est à dire afficher les nouvelles news avec une persistance d'un jour pour un utilisateur connecté.

Voilà au final ce que ça donne:

  • La page principale récapitulative des nouvelles news :

  • La page de gestion des modules auditionnés:

  •  Enfin la page d'ajout/édition d'un module à surveiller:

Encore merci à tous pour l'aide et les idées que vous avez pu m'apporter... N'hésitez pas à me donner vos éventuels commentaires si vous en avez

++

 
Précédente
 
Suivante
HomeHomeForums DNNForums DNNDéveloppementDéveloppementConnaitre la date et lConnaitre la date et l'heure de visite d'une page par les utilisateurs