как правильно в коде получить и применить пресеты для фото ?

ЕСТЬ РЕШЕНИЕ InstantCMS 2.X

как правильно в коде получить и применить пресеты для фото ?

#1 19 марта 2026 в 10:37

вот код всё работает — но работает конечно не правильно просто одно фото добавляется к разным путям, а нужно тут подключить пресеты и применить их к моему коду, подскажите что поправить ?

                            $model = cmsCore :: getModel ('users');
                            $images_model = cmsCore::getModel('images');
                            $presets = ['micro', 'small', 'normal'];
                            
                            $config = cmsConfig::getInstance();
                            $file_path = $config->upload_path;
                            $relative_path = str_replace($file_path, '', $temp_path);
                            
                            $result = [];

                            foreach ($presets as $preset_name) {
                                $result[$preset_name] = $relative_path;
                            }

                            $userData = [
                             'avatar' => $result,            
                             ];                             
                            $model->updateUser($userId, $userData);

#2 19 марта 2026 в 14:15

$temp_path

No Name

Что у вас тут? И этот код вообще часть чего?

$images_model

No Name

Это для чего? И главное. Что вы хотите получить на выходе? Массив $avatar в котором пути к фото разного размера?

#3 19 марта 2026 в 15:02

$temp_path — путь к сохранённой картинке, $images_model — это думаю использовать в дальнейшем для ресайзинга фото, 
на выходе да нужен массив с название пресетов и путями к разным размерам фото, как выше я написал щас всё работает, но один размер для всех пресетов

#4 19 марта 2026 в 17:51

 No Name, открываем историю ваших сообщений. Видим, что вы уже спрашивали подобное в феврале. И там уже был ответ instantcms.ru/forum/zagruzka-avatara-polzovatelja-cherez-kod.html#post-369843

  1. private function copyPreviews($image_file, $presets) {
  2. try {
  3. $image = new cmsImages($image_file);
  4. } catch (Exception $exc) {
  5. files_delete_file($image_file, 2);
  6. return false;
  7. }
  8. $result = [];
  9. foreach ($presets as $p) {
  10. $resized_path = $image->resizeByPreset($p, '');
  11. if (!$resized_path) {
  12. continue;
  13. }
  14. $result[$p['name']] = $resized_path;
  15. }
  16. files_delete_file($image_file, 2);
  17. return $result;
  18.  
  19. }
#5 19 марта 2026 в 18:34

$temp_path — путь к сохранённой картинке

No Name

А как вы её загружали и в каком виде сохранили в базе? Если это просто путь, то вам нужно разделить эту картинку на несколько разных размеров и затем составить массив. Для этого смотрите пример  Zau4man

#6 20 марта 2026 в 09:48

 Zau4man, да Вы правы, там я поторопился закрыть тему, думал что один размер мне хватит, но нет — нужны все пресеты которые есть в профиле пользователей, вот с пресетами и не получается разобратся,
$image = new cmsImages($image_file);  — тут какой путь к фалу должен лежать? (полный до сервера уже загруженого файла или это путь к файлу url)
и что должно быть в $presets  ?

#7 20 марта 2026 в 09:51

полный до сервера

No Name

полный до сервера

и что должно быть в $presets

No Name

там же в коде все есть

  1. $presets = $model_images->filterIn('name', $sizes)->getPresets();

где $sizes — массив имен пресетов. Их надо найти в настройках поля avatart.

#8 20 марта 2026 в 10:14

вот мой код, что то упускаю, но не работает

  1. $model = cmsCore :: getModel ('users');
  2. $model_images = cmsCore::getModel('images');
  3.  
  4. $config = cmsConfig::getInstance();
  5. $file_path = $config->upload_path;
  6. $relative_path = str_replace($file_path , '', $temp_path);
  7.  
  8. $image = new cmsImages($relative_path);
  9. $sizes = ['normal', 'micro', 'small'];
  10. $presets = $model_images->filterIn('name', $sizes)->getPresets();
  11.  
  12. $result = [];
  13. foreach ($presets as $p) {
  14. $resized_path = $image->resizeByPreset($p, '');
  15. if (!$resized_path) {
  16. continue;
  17. }
  18. $result[$p['name']] = $resized_path;
  19. }
  20.  
  21. $userData = [
  22. 'avatar' => $result,
  23. ];
  24. $model->updateUser($userId, $userData);
  25.  
Добавлено спустя 8 минут

 Zau4man, большое спасибо, всё заработало как нужно, отпечатался, нужно было
$image = new cmsImages($temp_path);

Добавлено спустя 5 минут

так же вопрос -files_delete_file($image_file, 2);  — 2 что означает ?

#9 20 марта 2026 в 10:25

 No Name, установите себе нормальную ide. скажем, netbeans netbeans.apache.org/front/main/index.html

Затем зажимаете ctrl и тыкаете по методу. И вас «перенесет» в файл, где этот метод объявлен. К самому объявлению. И в движке очень многое прокомментировано.

Вот ответ github.com/instantsoft/icms2/blob/6273a7eadaad685737b6b51cd986207804aa6a42/system/libs/files.helper.php#L119

#10 20 марта 2026 в 10:32

 Zau4man, спасибо

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.

Похожие темы

Похожее в блогах

🍪Мы используем файлы cookie для работы сайта. Читать подробнее.