2017-05-28 4 views
0

Ich habe eine Immobilienkomponente für mehrere meiner Kunden entwickelt. Ich habe fast alles funktioniert, außer Bilder von einem separaten Tisch zu bekommen.Joomla-Komponente - Standortmodell Problem

Ein Beispiel für ein Standortmodell ist City. Innerhalb des Stadtmodells ist die primäre Suche (Abfrage) eine Liste von Eigenschaften basierend auf der Stadt. Beispiel: Wenn in der Städteansicht oder im Menüeintrag eine Stadt wie Dallas ausgewählt ist, werden in der Einzelstadtansicht nur Immobilienangebote angezeigt, für die die Eigenschaft city = Dallas angezeigt wird.

Dieser Teil funktioniert gut, wie es soll. Das Problem ist, dass jeder Eintrag mehrere Bilder enthält, die in einer Bildtabelle gespeichert sind. In der Eigenschaftslistenansicht muss nur ein einzelnes Bild (von möglicherweise vielen) abgerufen und angezeigt werden.

Das Hinzufügen als "verknüpfte" Unterabfrage in der Haupteigenschaftsabfrage funktioniert nicht, da für jedes Bild mehrere doppelte Eigentumslisten erstellt werden. Also, ich habe als eine benutzerdefinierte Methode erstellt, Bild bekommen.

Der Compiler, den ich benutze, um das Gebäude zu unterstützen, unterstützt keine Signaturmethode (Methode, die Werte akzeptiert), also musste ich als Klassenwert hinzufügen. In der getItems Funktion Objekte, habe ich den Klassenwert:

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

Dann wird in der getImage benutzerdefinierte Funktion I

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

als Teil der Abfrage. In der Theorie sollte dies ein einzelnes Element ziehen, wobei a.propid der Eigenschaft id entspricht, z. B. property id = 3, und dann ein Element aus Bildern mit propid = 3 ziehen.

Schließlich fügte ich den Bildcode in der Site-Ansicht default.php als Teil des 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> 

Dies ist eine Art zu arbeiten, aber nicht vollständig, so dass ich bin mir nicht sicher, was ich sein kann fehlt. Mit der Art, wie ich dies codiert habe, zeigt es ein Bild an. Wenn es nur eine einzige Eigenschaftenliste gibt, dann zeigt es das richtige Bild, wenn jedoch, sagen wir, zwei Eigenschaften: id = 1 und id = 3, dann zeigt es eher propid = 3 aus der Bildtabelle für beide Auflistungen als zeige propid = 1 für id = 1 und propid = 3 für id = 3.

Irgendwelche Gedanken darüber, was ich vielleicht vermisse?

Antwort

0

Sie durchlaufen die $this->items, aber Sie verwenden das gleiche $this->image Objekt für alle von ihnen. Sie sehen also immer wieder dasselbe Bild.

Sie können dies beheben, indem Sie die Bildinformationen zum Objekt hinzufügen. Da Sie nur ein Bild anzeigen möchten, können Sie dies leicht mit einer einzelnen Abfrage tun, die Ihrer Artikeltabelle und Ihrer Bildtabelle beitritt.

Eine andere Möglichkeit besteht darin, die notwendigen Daten aus verschiedenen Abfragen in Ihrem Modell zu kombinieren, so dass Sie etwas wie $item->image->path verwenden können.