Модуль Prestashop 1.7: загрузка пользовательских изображений всегда заменяется - PullRequest
0 голосов
/ 20 февраля 2020

Мое поле file_url всегда удаляется в базе данных, если я не выбрал его. (даже если изображение уже интегрировано)

enter image description here

Если в этой ситуации нажать кнопку Сохранить, поле P C Изображение будет удалено .

Вот мой postImage() метод в моем AdminCustomController

 protected function postImage($id)
    {


        $file = isset($_FILES['file_url']) ? $_FILES['file_url'] : false;



        if ($file && is_uploaded_file($file['tmp_name'])) {


            $path = _PS_MODULE_DIR_ . 'custom/img/';
            $tmp_arr = explode('.', $file['name']);
            $filename = $file['name'];



            if (!Tools::copy($file['tmp_name'], $path . $filename)) {
                $errors[] = Tools::displayError('Failed to load image');
            }

        }
}

А вот renderForm ()

public function renderForm()
    {
      $image_url = '';

       if($this->object->file_url) {
            $image_url = ImageManager::thumbnail(
                _PS_MODULE_DIR_ . 'homecase/img/' . $this->object->file_url,
                $this->table . $this->object->file_url,
                150,
                'jpg',
                true,
                true
            );
        }
        $this->fields_form = [
            //Entête
            'legend' => [
                'title' => $this->module->l('Edition'),
                'icon' => 'icon-cog'
            ],

                array(
                    'type' => 'file',
                    'label' => $this->l('PC Image'),
                    'name' => 'file_url',
                    'display_image' => true,
                    'image' => $image_url ? $image_url : false,
                ),

....

Загрузка и сохранение в БД в порядке. Но когда изображение существует, и я не выбираю другое в поле. Поле file_url стирается в БД.

Не могли бы вы мне помочь?

Спасибо!

1 Ответ

0 голосов
/ 21 февраля 2020

Вам необходимо проверить, было ли загружено изображение, и только после этого обновлять записи в БД. Итак, просто попробуйте добавить return false; к вашему postImage методу, и эту проверку перед обновлением вашей БД, например

if ($this->postImage($id) !== false){ //update image record }

...