【问题标题】:Marking latest news as ... "new"将最新消息标记为...“新”
【发布时间】:2010-09-23 22:48:17
【问题描述】:

在我经常访问的一些网站或论坛上,我尚未阅读的条目被标记为“新”。我想在我开发的一个网站上实现这个功能(不时发布新闻)——php/mySQL。这通常是怎么做的?是否需要使用 cookie 来记住上次访问日期/时间?或者最后查看的帖子/网址?如何识别用户?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    Cookie 只是在会话中识别用户的一种可能方式,或者对于那些未经身份验证的用户在访问之间进行识别的一种可能方式。虽然是一种非常常见和有用的方式。 (PHP 也可以使用 sid 或其他参数,尽管它不再常见。)

    您需要存储用户已阅读或未阅读的线程/帖子。对于某些子论坛,您可以通过在“日期”或 postId 之前阅读所有内容来总结事情。

    这一切都取决于您的论坛、帖子和新闻的布局,以及它们的动态程度。您可能还只想显示自上次访问以来的新帖子,在用户当前在您的站点时显示新帖子,然后如果用户离开的时间超过预定义(x 小时)/计算( y 小时(如果是周末),z 小时(如果是管理员)时间。

    编辑:已访问链接的 CSS 不会帮助您处理新闻的新 cmets、线程中的新帖子、直接转到第一个未读帖子或访问工作/学校和家中的网站。

    【讨论】:

      【解决方案2】:

      附注:这样做实际上会复制浏览器功能:(只要您使用固定的 url)浏览器会在访问的链接上为链接提供不同的样式。当然,如果您清除历史记录,这将重置,但是如果 cookie 被删除,仅基于 cookie 的解决方案将再次清除(许多浏览器具有“删除私人数据”功能,默认情况下会同时删除两者,通常会在同时)...

      本站有固定的url(用于提问),并没有将访问的颜色设置为与正常链接颜色相同,因此您可以通过链接颜色看到您访问的问题。

      编辑:您也可以使用 CSS 来add an icon to visited links

      【讨论】:

      • 谢谢比尔,当我开始写作的时候,我实际上正在考虑这个问题,但我不知怎的忘记了...... ;)
      • 我怎么可能没想到!非常感谢您的意见!
      【解决方案3】:

      Cookie 是做这类事情的唯一可靠方法。

      我会使用 cookie 来存储用户上次访问的时间,但如果 cookie 不存在,我也会有一个合理的默认值,比如 1 周。

      然后针对比该日期新的事物显示新的。

      【讨论】:

        【解决方案4】:

        您可以将实际的上次访问日期存储在 cookie 中,也可以只将该人的唯一 ID 存储在 cookie 中并跟踪他们最后在数据库中读取的内容。如果你做后者,你可以让他们在不同的浏览器上使用相同的 id 登录,仍然可以获得准确的计数。

        【讨论】:

          【解决方案5】:

          我是这样做的:

          • 如果用户没有用户名并且没有登录,那么我不会显示新项目。
          • 如果用户已登录,并且已显示所有项目,则我将当前日期/时间存储在用户文件中,并使用此值来确定哪些项目是新的。
          • 如果用户日期/时间在最后十分钟内,那么我不会更新用户日期/时间。

          这是我的代码...

          function drawPage
              if (isLoggedIn) 
                  get dbUser from database
                  lastUserDateTime = dbUser.LastCommentTime
              else 
                  lastUserDateTime = yesterdaye
              end if
          
              for each post
                  get date of post 
                  if post->date < lastUserDateTime mark it as new
                  draw the post
              loop
          
              if (isLoggedIn) 
                  if (lastUserDateTime + 10 mins) < now 
                      dbUser.LastCommentTime = now
                      update dbUser in database
                  end if
              end if
          end function
          

          【讨论】:

            猜你喜欢
            • 2022-12-18
            • 2019-05-05
            • 1970-01-01
            • 1970-01-01
            • 2021-10-21
            • 2013-12-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多