1

gridviews の単一行に複数の画像を表示したい。例: テーブル A、テーブル B、テーブル C があります。

テーブル A には my_id があります。

表 B の my_id は外部キーです。my_id とともに c_id があります。

テーブル C には、テーブル B で参照されている c_id があります。

表 C には、画像を表示するためのファイルパスもあります。

表 A のi は次のmy_idとおりです: 1、2、3、4、5、6。

表 Bにはmy_id、次のようなものがあります。1、1、1、2、3、3。

表Bには、次のようなものもありc_idます。1、2、3、4、5、6。

表 C では、私の c_id は 1、2、3、4、5、6 です。これらの ID には、それぞれに関連付けられたファイルパスがあります。それらは異なるイメージです。

my_idこれで、外部キーの制約により、グリッドビューに 3 つの異なる画像が表示されるはずです。ただし、画像は 1 つしか表示されません。

私のコードは以下の通りです:

私のモデルでは

 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()  ;
}

私のインデックスファイルのグリッドビューの画像コード

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

また、これにブートストラップ ツール ヒントを追加しようとしています。ツール ヒントは正常に表示されますが、ループが正しい方法で行われていないため、画像が繰り返されていると思います。

これが私の更新されたグリッドビューコードです。

 [
        '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;

        }
        ],
4

1 に答える 1