2017-05-28 9 views
0

私はいくつかのクライアントのために不動産コンポーネントを開発してきました。私は別のテーブルから画像を取得することを除いて、ほとんどすべての作業をしています。Joomlaのコンポーネント - サイトモデルの問題

サイトモデルの1つの例は都市です。都市モデル内では、主要なget(query)は都市に基づいたプロパティのリストです。たとえば、都市ビューまたはメニューアイテムのいずれかからDallasなどの都市が選択された場合、単一都市ビューでは、プロパティcity = Dallasが表示されるプロパティリストのみが表示されます。

その部分はうまくいきます。問題は、すべてのリスティングに複数のイメージがあり、イメージテーブルに格納されていることです。プロパティリストビューでは、1つのイメージ(潜在的に多数のもの)のみが表示される必要があります。

メインのプロパティクエリ内で「リンクされた」サブクエリとして追加することは機能しません。これは、各イメージに対して複数の重複するプロパティリストを作成するためです。だから、私はカスタムメソッドとして作成し、イメージを取得します。

私がビルディングを支援するために使用しているコンパイラは、署名メソッド(値をとるメソッド)をサポートしていないため、クラス値として追加する必要がありました。 getImageカスタム関数で、私はクエリの一部として

$query->where('a.propid = ' . $db->quote($this->a_property_id)); 

を追加し、

$this->a_property_id = $item->id; 

その後:プロパティのためのgetItems機能では、私はクラスの値を作成しました。理論的には、これは、a.propidがプロパティid = 3のようなプロパティidと等しい単一の項目を取得し、次にpropid = 3の画像から項目をプルする必要があります。

最後には、私は、foreachのの一環として、サイトビューdefault.phpの画像のコードを追加しました:

<?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> 

これは作業のようなものですが、完全ではないので、私は私があるかもしれないものがわかりませんよ行方不明私はこれをコード化した方法で、画像を表示しています。プロパティリストが1つしかない場合は、適切なイメージが表示されますが、id、id = 1、id = 3の2つのプロパティがある場合、両方のリストのイメージテーブルからpropid = 3が表示されます。 id = 1ではpropid = 1、id = 3ではpropid = 3と表示されます。

私が紛失している可能性のある考えはありますか?

答えて

0

あなたは$this->itemsをループしていますが、それらのすべてに同じ$this->imageオブジェクトを使用しています。だから、あなたは同じイメージを何度も何度も見ます。

この問題を解決するには、アイテムに画像情報を追加します。 1つのイメージだけを表示したいので、アイテムテーブルとイメージテーブルを結合する単一のクエリで簡単にこれを行うことができます。

もう1つの方法は、モデル内のさまざまなクエリの必要なデータを組み合わせて、$item->image->pathのようなものを使用できるようにすることです。

関連する問題