2016-07-28 34 views
1

Ich möchte mehrere Bilder in einer Rasteransicht einzelne Zeile anzeigen. Zum Beispiel: Ich habe Tabelle A, Tabelle B und Tabelle C.Yii2 mehrere Bilder in der Gridview-Zeile anzeigen

Tabelle A hat my_id.

In Tabelle B ist my_id der Fremdschlüssel. Zusammen mit my_id hat es c_id.

Tabelle C hat, die in Bezug C_Id in Tabelle B ist

Tabelle C hat auch ein Filepath Bilder anzuzeigen.

in Tabelle A i my_id haben wie folgt: 1, 2, 3, 4, 5, 6.

In Tabelle B i haben my_id wie folgt. 1, 1, 1, 2, 3, 3.

In Tabelle B i folgt auch c_id haben, wie. 1, 2, 3, 4, 5, 6.

In Tabelle C sind meine C_Id der: 1, 2, 3, 4, 5, 6 und diese IDs haben Filepath mit jedem von ihnen verbunden ist. Sie sind unterschiedliche Bilder.

Jetzt sollte mein Gridview 3 verschiedene Bilder für my_id wegen der Fremdschlüsseleinschränkungen anzeigen. aber es zeigt nur 1 Bild an.

Mein Code ist unten:

In meinem Modell

public function getPictogramsID() 
{ 
    $pictogramsID = SdsrefGhsPictograms::find()->where(['sdsref_id' => $this->sdsref_id])->all(); 
    foreach ($pictogramsID as $picID){ 
     return $picID->pictogram_id; 
    } 
} 



public function getPictogramPath() 
{ 


    $pictogramsID = GhsPictogram::find()->where(['pictogram_id' => $this->getPictogramsID()])->all(); 
    foreach ($pictogramsID as $picID){ 
     $pic = $picID->pictogram_filepath; 
    } 
    return $pic; 

} 



public function getPictogramUrl() 
{ 

    //var_dump($this->getPictogramPath()); exit(); 
    return \Yii::$app->request->BaseUrl.'/web'.$this->getPictogramPath() ; 
} 

meine Indexdatei Rasteransicht Bildcode

[ 
     'label' => 'Hazards', 
     'format' => 'raw', 
     'value' => function ($data) { 
       return Html::img($data->getPictogramUrl(), ['alt'=>'myImage','width'=>'20','height'=>'30']); 
      }, 
     ], 

ich auch ein Bootstrap-Tool hinzufügen versuchen tip to this .. Tooltip wird erfolgreich angezeigt, aber ich denke, das Schleifen ist nicht in einem corre getan So, so wiederhole ich meine Bilder.

Hier ist mein aktualisierter Gridview-Code.

[ 
     'label' => 'Hazards', 
     'format' => 'raw', 
     'value' => function ($data) { 
      $images = ''; 

    // append all images 
      foreach($data->getPictogramName() as $name)  
       foreach ($data->getPictogramUrl() as $url)     
       $images = $images.Html::img($url,['alt'=>'','width'=>'30','height'=>'30', 'data-toggle'=>'tooltip','data-placement'=>'left','title' => $name ,'style'=>'cursor:default;']); 
      return $images; 

     } 
     ], 

Antwort

1

Sie haben einige logische Fehler in der Modell- und Rasteransicht. In all diesen Bereichen handelt es sich um einen Gegenstand statt um drei.

In Ihrem Modell

public function getPictogramsID() 
{ 
    $ids = []; 
    $pictogramsID = SdsrefGhsPictograms::find()->where(['sdsref_id' => $this->sdsref_id])->all(); 
    foreach ($pictogramsID as $picID){ 
     $ids[] = $picID->pictogram_id; 
    } 

    return $ids;// returning all three ids 
} 



public function getPictogramPath() 
{ 

    $pic = []; 
    $pictogramsID = GhsPictogram::find()->where(['pictogram_id' => $this->getPictogramsID()])->all(); 
    foreach ($pictogramsID as $picID){ 
     $pic[] = $picID->pictogram_filepath; 
    } 
    return $pic; 

} 



public function getPictogramUrl() 
{ 
    $url = []; 
    foreach($this->getPictogramPath() as $path): 
     $url[] = \Yii::$app->request->BaseUrl.'/web'.$path; 
    endforeach; 
    return $url; // returning al urls 
} 

Jetzt in Sie sehen Schleife über alle URLs und hängen Bilder mit jeder URL

[ 
    'label' => 'Hazards', 
    'format' => 'raw', 
    'value' => function ($data) { 

     $images = ''; 
     // append all images 
     foreach($data->getPictogramUrl() as $url): 
      $images = $images.Html::img($url, ['alt'=>'myImage','width'=>'20','height'=>'30']); 
     endforach; 
     return $images; 
    }, 
], 
+0

ich sehe, gibt es keinen Unterschied .. Es ist nur 1 Bild zurückkehrt? –

+0

Alle drei Funktionen im Modell aktualisiert? –

+0

Überprüfen Sie das Ergebnis von 'getPictogramsID()', gibt es drei Werte zurück? –