-4

我正在使用 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>
4

2 回答 2

0

第一步是查找/替换 'categories' 以更改为 'categories' 以确保您的代码与数据库表使用相同的语言,并且 - 一个快乐的奖励 - 它是英文的!

如果我理解这个问题:您有一个不同类别标题的列表,但没有这些类别的 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。

于 2012-10-10T10:37:02.250 回答
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 }?>
于 2012-10-10T12:05:45.510 回答