2016-07-28 5 views
1

gridviews 단일 행에 여러 이미지를 표시하려고합니다. 예 : 표 A, 표 B 및 표 C가 있습니다.Yii2 gridview 행에 여러 이미지 표시

표 A에는 my_id가 있습니다.

표 B에서 my_id는 외래 ​​키입니다. my_id와 함께 c_id를가집니다.

표 C는

표 C는 화상을 표시하기위한 파일 경로를 가지고 표 B.에서 참조되는 C_ID있다. 다음 표 my_id을 가지고

다음과 같이 1, 2, 3, 4, 5, 6

에서 표 Bmy_id있다. 다음 나도 c_id이 3

표 B에서 1, 1, 1, 2, 3,. 1, 2, 3, 4, 5, 6입니다.

내 c_id는 : 1, 2, 3, 4, 5, 6이며이 ID는 각각 파일 경로와 관련이 있습니다. 그들은 서로 다른 이미지입니다.

외래 키 제약 조건으로 인해 내 gridview에 my_id의 3 가지 이미지가 표시되어야합니다. 단 하나의 이미지 만 표시합니다.

내 코드는 다음과 같습니다 : 내 모델에서

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']); 
      }, 
     ], 

내 인덱스 파일 그리드 뷰 이미지 코드 팁이 .. 도구 팁 성공적으로 표시하지만 루프 내에서 이루어지지 않습니다 생각합니다. ct 방식으로 내 이미지를 반복합니다.

여기 내 업데이트 된 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; 

     } 
     ], 

답변

1

모델 및 격자보기에는 논리 오류가 거의 없습니다. 이 모든 영역에서 3 개가 아닌 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 내가 볼

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

이미지를 모든 URL을 통해 루프를 확인하고 추가? –

+0

세 가지 기능이 모두 모델에서 업데이트 되었습니까 ?? –

+0

'getPictogramsID()'의 결과를 확인하십시오. 세 개의 값을 반환합니까 ?? –