【问题标题】:Yii2 display multiple images in gridview rowYii2在gridview行中显示多张图片
【发布时间】:2016-07-28 11:35:50
【问题描述】:

我想在 gridviews 单行中显示多个图像。例如:我有A表、B表和C表。

表 A 有 my_id。

在表 B 中 my_id 是外键。除了 my_id 它还有 c_id。

表 C 有 c_id,在表 B 中引用。

表 C 也有显示图像的文件路径。

表 A 我有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 具有与它们中的每一个关联的文件路径。它们是不同的图像。

由于外键约束,现在我的 gridview 应该为 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']); 
            },
        ],   

我也在尝试为此添加引导工具提示。工具提示显示成功,但我认为循环没有以正确的方式完成,所以它重复了我的图像。

这是我更新的 gridview 代码。

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

        }
        ],

【问题讨论】:

    标签: image gridview yii2 yii2-model


    【解决方案1】:

    您在模型和网格视图中几乎没有逻辑错误。在所有这些领域中,您都在处理一项而不是三项。

    在你的模型中

     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
    }
    

    现在您可以查看所有 url 的循环并在每个 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;
        },
    ],
    

    【讨论】:

    • 我明白了,没有区别。它只返回一张图片?
    • 更新了模型中的所有三个函数??
    • 查看getPictogramsID()的结果,是不是返回了三个值??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多