Joomla组件 - 站点模型问题

时间:2017-05-28 23:57:42

标签: joomla joomla3.0 joomla-extensions

我一直在为我的几个客户开发房地产组件。除了从单独的表格中获取图像外,我的一切工作都很有效。

网站模型的一个示例是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.

对我可能缺少什么的想法?

1 个答案:

答案 0 :(得分:0)

您正在循环$this->items但是对所有这些对象使用相同的$this->image对象。所以你一遍又一遍地看到同样的图像。

您可以通过将图像信息添加到项目来解决此问题。由于您只想显示一个图像,因此可以通过单个查询加入项目表和图像表来轻松完成此操作。

另一种方法是在模型中组合来自不同查询的必要数据,以便您可以使用$item->image->path之类的内容。