Динамически отображать одно изображение профиля - PullRequest
0 голосов
/ 16 января 2019

Я пробовал разные способы, но пока ничего. Здесь есть похожие темы, но, похоже, они не касаются моей конкретной ситуации. Я хотел бы отобразить одно изображение профиля пользователя из таблицы «images» со ссылкой внешнего ключа на таблицу «users». У меня есть сценарий, который работает, но он отображает несколько изображений с выражением «foreach». Изображения также сохраняются в локальной папке «uploads» в корневом каталоге. Вот код, который работает для нескольких изображений в представлении:

<?php foreach($images_model as $images):?>
<img src="<?php echo base_url()."uploads/".$images->fileName;?>" alt="" class="img-thumbnail">

Где «fileName» - это столбец из таблицы «images». Images_model выглядит так:

function get_images(){      
    $this->db->from('images');      
    $this->db->order_by('date_uploaded', 'asc');                            
    $query = $this->db->get();      
    return $query->result();    
}

Раздел загрузки изображения из контроллера ниже:

if($this->upload->do_upload())      {
        $file_data = $this->upload->data();         
        $data['user_id'] =  $this->session->userdata('user_id');
        $data['fileName'] = $file_data['file_name'];
        $data['filePath'] = $file_data['full_path'];
        $data['fileType'] = $file_data['file_type'];
        $data['fileSize'] = $file_data['file_size'];            
        $data['date_uploaded'] = date('Y/m/d H:i:s');
    }   

Вот необходимая часть таблицы «изображений»:

Существует ли безболезненный способ отображения одного изображения из таблицы «images», которое бы учитывало активный «user_id», который является внешним ключом в таблице «images»? Другими словами, чтобы отобразить желаемое изображение пользователя в качестве профиля.

Спасибо за помощь. Цените любой вклад.

1 Ответ

0 голосов
/ 16 января 2019

В вашей модели функции get_images вы получаете все записи из таблицы, поэтому отображаются несколько изображений.

В вашем сеансе user_id используйте его для получения одной записи пользователя.

Контроллер

public function SingleUserImage(){
     $data['images'] = $this->images_model->get_images();
     return $this->load->view('filename', $data);  
}

Изменить запрос модели следующим образом

MODEL

function get_images(){ 
    return $this->db->get_where('images', ['user_id' => $this->session->userdata('user_id')])->row();
}

У вас есть одна запись пользователя (только одна строка), поэтому нет необходимости использовать foreach loop

View

Согласно предоставленным вами данным таблицы полный путь к изображению сохраняется с использованием только переменной в атрибуте src тега img

<img src="<?php echo $images->fileName;?>" alt="" class="img-thumbnail">

Обновление: -

Согласно вашему требованию с петлей используйте это

<?php foreach($images_model as $images):
    if($images->user_id == $this->session->userdata('user_id')):?>
       <img src="<?php echo base_url()."uploads/".$images->fileName;?>" alt="" class="img-thumbnail">

<?php endif; endforeach;?>
...