根据Joomla中的当前用户ID显示动态内容

时间:2014-07-08 22:29:19

标签: php sql join joomla

我正在开发一个自定义模块,根据当前用户是否阅读过文章来显示动态文章列表。当用户阅读或“提交”文章时,文章ID和标题存储在名为“completed_quests”的表中。动态列表仅显示在completed_quests表中找不到的文章。下面的代码完全正常,但是我遇到了一些问题。

目前,无论登录哪个用户,列表都以相同的方式显示。例如,假设用户540读取并提交文章。当用户541登录时 - 它正在显示列表,好像用户541也提交了任务。我可能会使这个问题复杂化,但我需要让列表以独特的方式显示,具体取决于登录的用户。请参阅下面的代码。我已经从数据库中提取了用户ID并定义了$ userID变量。现在我只需要知道它在等式中的位置。

编辑:以下是经过修改的工作代码。

<?php

$catID = JRequest::getVar('id');
$user = JFactory::getUser();
$userID = (int)$user->id;

$query = "SELECT * FROM arp2i_completed_quests AS r
RIGHT JOIN arp2i_content AS c
ON c.id=r.id 
AND c.catid=r.catid 
AND r.user_id = $userID
WHERE r.user_id IS NULL "; // prepare query

$db = &JFactory::getDBO(); // get database object
$db->setQuery($query); // apply query
$articles = $db->loadObjectList(); // execute query, return result list

foreach($articles as $article){ // loop through articles

if ($article->id >1 && $article->catid == $catID) {
       echo '<a href="http://localhost/quest/index.php/quests/' . $article->id . '-' . $article->title . '">' . 'ID:' . $article->id . ' Title: ' . $article->title . '</a>' . '<br />';}
} 

?>

1 个答案:

答案 0 :(得分:0)

根据你的回答是arp2i_completed_quests文件id中的id字段。然后你必须交换连接并使用用户ID创建一个条件。

<?php
$catID = JRequest::getVar('id');
$user = JFactory::getUser();
$userID = (int)$user->id;

$query = "SELECT * FROM arp2i_content as c ";
$query .= "left JOIN arp2i_completed_quests as r on ";
$query .= "c.id=r.id AND c.catid=r.catid and r.user_id != ".$userID." ";
$query .= "where r.id is null"; // prepare query

$db = JFactory::getDBO(); // get database object
$db->setQuery($query); // apply query
$articles = $db->loadObjectList(); // execute query, return result list

foreach ($articles as $article) { // loop through articles
    if ($article->id > 1 and $article->catid == $catID) {
        echo '<a href="http://localhost/quest/index.php/quests/' . $article->id . '-' . $article->title . '">' . 'ID:' .
             $article->id . ' Title: ' . $article->title . '</a>' . '<br />';
    }
}

?>