【发布时间】:2014-09-05 07:35:46
【问题描述】:
我有一些当前在 Joomla 中生成动态文章列表的工作代码。这是我正在开发的任务系统的一部分。每篇文章(任务)都有一个自定义的先决条件值分配给它。我已经使用一个名为 Fields Attach 的扩展来分配这些值,它允许您定义自定义文章属性并将它们存储在数据库中。下面的代码列出了 prereq 值为 0 的所有任务或任何 prereq 值与已完成任务表中任务的文章 id 匹配的任务。
现在,当用户提交任务时,它会将文章信息(id、标题等)存储在已完成任务表中。如果任务的 prereq 值与尚未完成的任务的 id 匹配,则不会显示。希望这是有道理的。
所以,我的问题是:如何存储文章 ID 数组?例如,如果我希望某个特定任务具有多个先决条件,我可以为该任务分配类似 1、2、3 的值。但是,我如何检查以确保存储数组中的所有值都存在于已完成的任务表中?我必须能够为使该系统正常工作的任务分配多个先决条件。显示我当前的代码可能会有所帮助:
这是我用来编译列表的查询:
$query = "SELECT c.id, c.title, c.catid, r.user_id, r.prereqID, f.fieldsid, f.articleid, f.value FROM arp2i_fieldsattach_values AS f
LEFT JOIN arp2i_content AS c
ON f.articleid=c.id
AND f.fieldsid=5
AND f.value!=0
LEFT JOIN arp2i_completed_quests AS r
ON r.user_id = $userID
ORDER BY f.articleid, c.id"; // prepare query
$db = &JFactory::getDBO(); // get database object
$db->setQuery($query); // apply query
$prereqs = $db->loadObjectList(); // execute query, return result list
显示列表的php:
foreach ($prereqs as $prereq){ // loop through articles
if ($prereq->fieldsid == 1) {
$questXp2 = $prereq->value;
}
else if ($prereq->fieldsid == 3) {
$hexValue2 = $prereq->value;
}
else if ($prereq->fieldsid == 4) {
$image2 = $prereq->value;
}
if ($prereq->catid == $catID
&& $prereq->prereqID == $prereq->value) {
echo '<div class="questBlock" style="background-color:' . $hexValue2 . ';">' . '<a class="questLink" href="http://localhost/quest/index.php/quests/' . $prereq->articleid . '-' . $prereq->c.title . '">' . '<img src="images/documents/' . $prereq->articleid . '/' . $image2 . ' " />' . $prereq->title . '<span class="xpFloat">' . $questXp2 . ' XP' . '</span>' . '</a>' . '</div>' ;}
}
为了澄清,假设我有 4 个任务,文章 ID 为 1、2、3 和 4。我希望任务 4 的先决条件值为 1、2、3。这样,任务 4 将不会显示,直到任务 1、2 和 3 已完成。任何帮助将不胜感激。
【问题讨论】:
标签: php mysql sql arrays joomla