Более простым подходом будет предоставление тега img
по умолчанию внутри модала и предоставление источника при нажатии на изображение внутри DetailView
, которое загрузит изображение внутри модала.
Кроме того, изображение может быть любого размера, как и ваше модальное окно, которое можно настроить на любой размер, маленький или большой, используя классы .modal-lg
или .modal-sm
, поэтому добавьте img-responsive
класс к тегу img
по умолчанию внутри модального окна, и изображения будут реагировать относительно размера модального окна.
Итак, первое, что нужно сделать, это добавить тег изображения внутри модального окна с помощью классаimg-responsive
и src='//:0'
, вы можете Читать здесь, зачем использовать ://0
для пустого тега изображения
\yii\bootstrap\Modal::begin(['id' => 'identity_file', 'footer' => '<a href="#" class="btn btn-sm btn-primary" data-dismiss="modal">Close</a>']);
echo "<img src='//:0' class='img-responsive'>";
\yii\bootstrap\Modal::end();
Добавить класс к изображению внутри кода DetailView
, яПредположим, что $user->identity_file
имеет полный путь к файлу.
<?php echo DetailView::widget(
[
'model' => $user,
'attributes' => [
'id',
[
'attribute' => 'identity_file',
'value' => $user->identity_file,
'format' => [
'image',
['width' => '120', 'height' => '120', 'class' => 'popup-image'],
],
],
],
]
)
?>
Затем добавьте следующий javascript поверх вашего представления, где вы используете виджет DetailView
.
$js = <<<JS
$(".popup-image").on('click',function(){
$("#identity_file img").attr('src', $(this).attr('src'))
$("#identity_file").modal('show');
});
JS;
$this->registerJs($js, View::POS_READY);
Теперь нажмите на изображение, и вы увидите адаптивное изображение, содержащееся в модальном окне с адаптивными размерами.