我使用的是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>
第一步是查找/替换"类别",将其更改为"类别"以确保您的代码使用与数据库表相同的语言,并且它是英文的,这是一个很好的奖励!
如果我理解这个问题:您有一个类别的不同标题列表,但没有这些标题的ID。您不能保证每个标题都对应一个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。
<?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 }?>