我正在使用joomla 2.5,我想获取不同类别和文章列表的列表。
我正在使用以下代码来获取所有类别,但我无法获取类别ID以在另一个插入中使用它。
如何在下面的选择列表中获取这些不同的字段ID。
$db = &JFactory::getDBO();
$query = "SELECT DISTINCT title FROM #__categories WHERE published = '1' ORDER BY level";
$db->setQuery($query);
$rows = $db->loadObjectList();
?>
<?php $catagories = (isset($this->settings['catagories']) ? $this->settings['catagories'] : "");?>
<select id="catagories" name="settings[catagories]">
<option value="default" selected="selected">---Default---</option>
<?php foreach ($rows as $row) {?>
<option <?php //if ($row->id == $catagories) { echo " selected=\"selected\""; } ?>value="<?php //echo $row->id;?>" >
<?php echo $row->title;?>
</option>
<?php }?>
</select>
答案 0 :(得分:0)
第一步是查找/替换“catagories”以更改为“类别”,以确保您的代码使用与数据库表相同的语言,并且 - 一个快乐的奖励 - 它在英语!
如果我理解这个问题:你有一份不同类别标题的清单,但没有这些标识。您不能保证每个标题只对应一个ID;实际上,如果在查询中使用'DISTINCT'对返回的行有任何影响,那么最后有两个ID对应于单个标题。
这是非常不寻常的,所以你可能想要回顾一下为什么(i)你有几个同名(同名)类别和(ii)这种情况,为什么不应该退回你的表格中选择。
如果事实证明您确实需要提供不同类别标题的列表,并且表单提交要对这些标题做一些事情,则必须有ID,然后选择每个标题使用哪个ID是不明确的。
假设使用哪个ID无关紧要,只要它与相应的标题匹配,您就可以执行以下操作:
<?php foreach ($rows as $row) {
$query = "SELECT id FROM #__categories WHERE title = " . $row->title . " AND published = '1' LIMIT 1 ";
$db->setQuery($query);
$row->id = $db->loadResult();
?>
<option <?php if ($row->id == $catagories) { echo " selected=\"selected\""; } ?>value="<?php echo $row->id;?>" >
<?php echo $row->title;?>
</option>
<?php }?>
要获得更有效的解决方案,您可以考虑在原始查询中使用UNION为每个返回的行提供ID。
答案 1 :(得分:0)
<?php
$db = &JFactory::getDBO();
$query = "SELECT DISTINCT title FROM #__categories WHERE published = '1' ORDER BY level";
$db->setQuery($query);
$rows = $db->loadObjectList();
?>
<?php foreach ($rows as $row) {
$query = "SELECT id FROM #__categories WHERE title = " . $row->title . " AND published = '1' LIMIT 1 ";
$db->setQuery($query);
$rowid = $db->loadResult();
?>
<option value="<?php echo $rowid;?>" >
<?php echo $row->title;?>
</option>
<?php }?>