codeigniter 标记已读文章

f5emj3cl  于 2023-02-27  发布在  其他
关注(0)|答案(4)|浏览(122)

我有一个应用程序,显示外部链接到一个网站,他们都是文章。这些文章都在数据库中。我目前正在寻找一个解决方案,将显示用户的新文章在他们的下一次访问,通过一个简单的标签,如"新"等。
我已经做了一个列ID、user_id、article_id和read的表。
我已经开始了对模型和控制器的工作,但基本上我需要在用户点击文章时将文章ID和用户ID传递给jQuery函数,这样数据就可以插入到数据中,显示文章已经被阅读,因此"NEW"标签将不再显示。
这是最好的方法吗?我需要一些关于如何处理jQuery方面的帮助。
谢谢你。

bxpogfeg

bxpogfeg1#

基于sawny所说的,您不需要其他控制器,只需在控制器中定义一个函数来处理这个问题
baseurl.com/controller/function/linkID
在函数中,您需要确保将Artilce ID和User ID存储在单独的表中。
表名:文章_视图字段:用户ID、文章ID
这样,您就可以连接这个表,以帮助您显示哪些文章实际上是每个用户的新文章。
一旦它被存储,你可以重定向用户到实际的文章.

polkgigr

polkgigr2#

如果你使用javascript,它不会为没有javascript的人工作。我使用了一个像?out=*articleId*这样的出链接。然后你可以保存userX点击了linkX。然后你重定向用户宽度header("Location: *realURlFromDB*");

ou6hu8tu

ou6hu8tu3#

我已经使用JOIN并保留参数来完成了。这也会返回空值。因此我可以检查空值并显示NEW标记。

yc0p9oo0

yc0p9oo04#

<?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);

相关问题