2012-10-10 108 views
-4

我使用joomla 2.5,我想获取不同类别和文章列表的列表。获取类别和文章列表joomla

我正在使用下面的代码来获取所有类别,但我无法获得类别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
<?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 }?> 
0

的第一步是做一个查找/替换为“名作”更改为“类别”,以确保您的代码使用同一种语言作为数据库表和 - 一个快乐的奖金 - 这是英文!

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

+0

感谢乔你的时间我试了一下它的工作正常与小errorcorrect代码是 –