【问题标题】:marking read articles标记已读文章
【发布时间】:2011-12-18 16:32:08
【问题描述】:

我有一个显示网站外部链接的应用程序,它们都是文章。这些文章在数据库中。我目前正在寻找一种解决方案,通过“新”等简单标签向用户展示他们下次访问的新文章。
我制作了一张带有 cols ID、user_id、article_id、read 的表。
我已经开始研究模型和控制器,但基本上我需要在用户单击该文章时将文章 ID 和用户 ID 传递给 jquery 函数,以便可以将数据插入到显示文章已被阅读的数据中。因此,该文章将不再显示“新”标签。

这是最好的方法吗?我需要一些关于如何处理 jquery 方面的帮助。

谢谢。

【问题讨论】:

  • 我已经使用带有参数 left 的 JOIN 完成了它。这也返回空值。因此,我可以检查空值并显示 NEW 标记。

标签: php javascript jquery codeigniter


【解决方案1】:

根据 sawny 所说的,您将不再需要其他控制器。只需在控制器中定义一个函数来处理这个

baseurl.com/controller/function/linkID

在函数中,您需要确保将 Artilce ID 和用户 ID 存储在单独的表中。

表名:article_views 字段:用户ID、文章ID

这样您就可以加入此表格以帮助您显示哪些文章对每个用户来说实际上都是新的。

存储后,您可以将用户重定向到实际文章。

【讨论】:

  • 谢谢,这是我目前面临的问题。我不知道如何显示或检查文章是否为“新”或已阅读,因为如果表为空,则连接不会显示任何内容。因此我不知道如何对每篇文章进行检查。
  • 将阅读的文章作为数组传递给视图。然后在将它们打印出来时,在 if 语句中使用 PHP 函数 in_array($article, $articles_array)。如果它不在该数组中,则将其显示为“新”。如果它显示为“已读”。
【解决方案2】:

如果您使用 javascript,则它不适用于没有 javascript 的人。我使用了像?out=*articleId* 这样的链接。然后你可以保存 userX 已经点击了 linkX。然后你重定向用户宽度header("Location: *realURlFromDB*");

【讨论】:

  • 啊哇我没想到,这样我实际上可以记录很多其他的东西,比如点击。谢谢你。为此,我需要另一个控制器来处理这个然后重定向?
  • @viperfx 我自己是 MVC 新手,所以我不确定。但是我在我的控制器logger 中完成了一个函数out。这样我就可以在同一个文件中获取所有日志记录功能。
【解决方案3】:

我已经使用带有参数 left 的 JOIN 完成了它。这也返回空值。因此,我可以检查空值并显示 NEW 标记。

【讨论】:

    【解决方案4】:
    <?php
    
    //query that fetch unread articles
    $query = "
        SELECT 
            articles.* 
        FROM 
            articles
        LEFT JOIN
            read_articles
                ON articles.id != read_articles.article_id
        WHERE
            read_articles.user_id = 1
    ";
    
    /**
    
    Test db data
    CREATE TABLE IF NOT EXISTS `articles` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `title` varchar(255) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
    
    INSERT INTO `articles` (`id`, `title`) VALUES
    (1, 'Article 1'),
    (2, 'Article 2');
    
    -- --------------------------------------------------------
    
    CREATE TABLE IF NOT EXISTS `read_articles` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `article_id` int(11) NOT NULL,
      `user_id` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
    
    INSERT INTO `read_articles` (`id`, `article_id`, `user_id`) VALUES
    (1, 1, 1);
    

    【讨论】:

      猜你喜欢
      • 2019-03-13
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      相关资源
      最近更新 更多