php - 在 Joomla 中显示动态文章列表

标签 php mysql sql joomla

在类别列表中,我希望能够动态显示文章列表。我正在开发的网站允许用户在阅读文章后“提交”文章。当他们点击提交按钮时,该文章的 ID 会存储在数据库中名为“completed_quests”的表中。我需要做的是让 Joomla 检查文章 ID 是否同时存在于“content”和“completed_quests”表中。如果两个表中都存在文章 ID,则该文章不应显示在类别列表中,因为该文章或“任务”已经提交。如果文章 ID 存在于“content”表中,但不存在于“completed_quests”表中,则该文章应该显示在类别列表中,因为它尚未提交注释。

我想知道是否应该重写特定的核心 Joomla 文件以更改类别列表输出,或者是否应该开发自定义模块来创建此动态列表。任何指导将不胜感激。如果您对如何显示此动态列表有任何其他想法,我洗耳恭听。

编辑:我首先在 Joomla 中开发一个自定义模块,至少用于测试。以下代码未按预期工作。当我取出以下行“WHERE arp2i_completed_quests.id IS NULL”时,它会显示两个表中都存在的文章列表。但我需要它做的是显示内容表中存在但不在completed_quests 表中的行。当我添加 WHERE 时,它会为存在的每一行显示文本“ID:”和“TABLE:”,但该行的实际 id 和标题不会回显到屏幕上。请帮忙。

工作代码(参见注释)。

<?php

$query = "SELECT * FROM arp2i_completed_quests RIGHT JOIN arp2i_content ON arp2i_content.id=arp2i_completed_quests.id WHERE arp2i_completed_quests.id IS NULL LIMIT 0, 30 "; // 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
    echo 'ID:' . $article->id . ' Title: ' . $article->title . '<br />';

} 

?>

最佳答案

您可以在模板中覆盖 com_content 的 ListView 。
您可以通过将 default.php 从/components/com_content/views/categories/tmpl/复制到/templates/yourtemplate/html/com_content/categories/

但是,我相信此类模板覆盖仅允许您更新模块和组件的显示文件(default.php 文件),而不是模型,这意味着您必须将数据库查询添加到此布局文件中(或者进入图书馆),这感觉是一种非常hacky的方法。不过,它应该可以工作。

更好的解决方案是创建一个具有单个 View 的定制组件,以及一个查询数据库以创建适当列表的模型。甚至可以让整个组件成为一个定制组件(将文章保存在该组件中),而根本不使用 Joomla 的文章管理器。

如果您的列表页面未分页,或者您不关心辅助页面上的 SEO 友好 URL,那么您还可以创建一个模块来显示列表并将其插入文章区域。模块通常比组件更容易制造。您将数据库查询输入到模块的帮助程序文件中。

关于php - 在 Joomla 中显示动态文章列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24484128/

相关文章:

java - 错误: no suitable drivers for jdbc in android studio

javascript - 使用 $.post 加载数据

php - Laravel Eloquent 有一个。试图获得非对象的属性

php - 如何使用 PHP 从字符串中删除子字符串?

php - MySql TIMESTAMP 列是自动更新的。为什么?

php - 根据相关 id 列将第二个二维数组中的数据添加到第一个二维数组中

php - MySQL "FIELD_IN_SET()"相当于 "joined"表

python - 从 Django QuerySet 获取 SQL

mysql - 从表中选择 *,其中所需期间与现有期间不重叠

sql - 如何重命名名称为 "Database"的 MSSQL 数据库?