【问题标题】:Display Dynamic List of Articles in Joomla在 Joomla 中显示文章的动态列表
【发布时间】:2014-06-30 06:32:43
【问题描述】:

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

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

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

工作代码(见 cmets)。

<?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 />';

} 

?>

【问题讨论】:

  • 我将其切换为 RIGHT 连接并交换了查询中的表,现在我得到了预期的结果。我再次更新了代码。
  • 什么版本的 Joomla?

标签: php mysql sql joomla


【解决方案1】:

您可以在模板中覆盖 com_content 的列表视图。
您可以通过将 default.php 从 /components/com_content/views/categories/tmpl/ 复制到 /templates/yourtemplate/html/com_content/categories/ 来做到这一点

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

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

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

【讨论】:

  • 我可能会走这条路,因为我更喜欢使用模块而不是使用组件。我不关心这个特定应用程序的 SEO。一旦我探索了我的选择,我会报告回来。
【解决方案2】:

您应该只开发一个完全符合您要求的内容视图。如果您有一些编程经验,应该非常简单。您无需更改任何核心文件。

【讨论】:

  • 哦,那太理想了。我有一点编程经验,之前在 Joomla 中开发过一些自定义模块和组件。您能否为我指明一个资源的方向,让我开始开发自定义内容视图?
  • 您建议的是模型视图控制器 (MVC) 组件吗?
  • 是的——就是这样。顺便说一下,R​​ichard B 的以下解决方案正是我所建议的——除了模块部分。
  • 感谢您的指导。我想避免开发自定义模块或组件来实现这一点,但它看起来是最合乎逻辑的选择。
猜你喜欢
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 2014-12-24
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多