我一直在为我的几个客户开发房地产组件。除了从单独的表格中获取图像外,我的一切工作都很有效。
网站模型的一个示例是City。在城市模型中,主要的get(查询)是基于城市的属性列表。例如,如果从城市视图或菜单项中选择了达拉斯等城市,则在单个城市视图中仅显示属性城市=达拉斯将显示的房产列表。
这部分工作得很好,正如它应该的那样。问题是每个列表都有多个图像,存储在图像表中。在属性列表视图中,只需要显示单个图像(可能有很多图像)。
在主要属性查询中添加为“链接”子查询不起作用,因为它将为每个图像创建多个重复的属性列表。所以,我创建了一个自定义方法,获取图像。
我用来帮助构建的编译器不支持签名方法(取值的方法),所以我需要添加为类值。在属性的getItems函数中,我创建了类值:
$this->a_property_id = $item->id;
然后,在getImage自定义函数中我添加了
$query->where('a.propid = ' . $db->quote($this->a_property_id));
作为查询的一部分。理论上,这应该拉出a.propid等于属性id的单个项目,例如property id = 3,然后从propid = 3的图像中拉出一个项目。
最后,我在站点视图default.php中添加了图像代码,作为foreach的一部分:
<?php foreach ($this->items as $item): ?>
<li>
<div class="uk-grid uk-panel uk-panel-box">
<div class="uk-width-medium-1-3">
<?php if(empty($this->image->path)){ ?>
<div> <a href="<?php echo 'index.php?option=com_mostwantedrealestate&view=property&id='.$item->id;?>" title="<?php echo $item->name;?>" rel=""> <img class="uk-thumbnail uk-thumbnail-medium" src="<?php echo JURI::root().'media/com_mostwantedrealestate/images/No_image_available.png'; ?>"> </a> </div>
<?php } else { ?>
<div> <a href="<?php echo 'index.php?option=com_mostwantedrealestate&view=property&id='.$item->id;?>" title="<?php echo $item->name;?>" rel=""> <img class="uk-thumbnail uk-thumbnail-medium" src="<?php echo JURI::root() . $this->image->path . $this->image->filename; ?>"></a></div>
<?php } ?>
</div>
<div class="uk-width-medium-1-3 uk-float-left">
<a href="<?php echo 'index.php?option=com_mostwantedrealestate&view=property&id='.$item->id;?>" title="<?php echo $item->name;?>" rel="" >
<h3><?php echo $item->name; ?></h3>
</a>
</div>
这有点工作,但不完全,所以我不确定我可能会缺少什么。通过我编码的方式,它显示了一个图像。如果只有一个属性列表,那么它会显示正确的图像,但是如果有一个,假设有两个属性:id = 1和id = 3,那么它会从图像表中显示两个列表的propid = 3,而不是比id = 1显示propid = 1而id = 3则显示propid = 3.
对我可能缺少什么的想法?
答案 0 :(得分:0)
您正在循环$this->items
但是对所有这些对象使用相同的$this->image
对象。所以你一遍又一遍地看到同样的图像。
您可以通过将图像信息添加到项目来解决此问题。由于您只想显示一个图像,因此可以通过单个查询加入项目表和图像表来轻松完成此操作。
另一种方法是在模型中组合来自不同查询的必要数据,以便您可以使用$item->image->path
之类的内容。