Загрузка изображений

ЗАКРЫТО InstantCMS 2.X
#1 9 марта 2024 в 16:40

Всем привет. Подскажите, пожалуйста, как загрузить на сервер изображения нужных размеров и с помщью какой функции получить запись типа:

---
content_item: >
  parsingrss/owl_detail_240_0454112eff6cad98b336c321e845148a.jpg
content_list: >
  parsingrss/owl_detail_240_0454112eff6cad98b336c321e845148a.jpg
content_list_small: >
  parsingrss/owl_detail_240_0454112eff6cad98b336c321e845148a.jpg
small: >
  parsingrss/owl_detail_240_0454112eff6cad98b336c321e845148a.jpg

чтобы записать в таблицу con_news ?

#2 9 марта 2024 в 20:52

На сервер, это куда? И как?

#3 9 марта 2024 в 21:37

Вот этот файл посмотрите:

/system/core/uploader.php

Там всё откомментировано.

#4 10 марта 2024 в 12:55

Загрузки фото добился. Теперь не понятно, как нормализовать фото перед загрузкой. Какая функция за это отвечает. :(

Добавлено спустя 15 часов

На сервер, это куда? И как?

Lora

Это по адресу, который формирует эта функция :$dest_dir = files_get_upload_dir($this->cms_user->id);

Какую надо использовать функцию для создания пресетов перед загрузкой в папку?

#5 10 марта 2024 в 13:12

Мало информации. Как выводите поле загрузку файла? если системное, тогда в опциях там указывается какие пресеты создавать и данные передаются сюда github.com/instantsoft/icms2/blob/master/system/controllers/images/actions/upload.php и там происходить загрузка и создание пресетов

#6 10 марта 2024 в 13:20
  1. <?php
  2.  
  3. class actionParsingrssSaveNew extends cmsAction{
  4.  
  5. public function run(){
  6.  
  7. $h1 = $_SESSION['article']['h1'];
  8. $src = $_SESSION['article']['img']['src'];
  9. $text = $_SESSION['article']['p'];
  10. $h = explode('/', $src);
  11. $file_name = $h[count($h) - 1];
  12.  
  13. //Создаем дирректорию для сохранения файла
  14. $dest_dir = files_get_upload_dir($this->cms_user->id);
  15. //$presets = cmsCore::getModel('images')->getPresets();
  16.  
  17. //$dest_dir = $images->resizeByPreset($presets, $src, $this->cms_user->id);
  18. $h = explode('/', $dest_dir);
  19.  
  20. $dir2 = $h[count($h) - 2];
  21. $dir3 = $h[count($h) - 3];
  22. $dir4 = $h[count($h) - 4];
  23. $dir5 = $h[count($h) - 5];
  24.  
  25. //print_r('"'.$dir5.'/'.$dir4.'/'.$dir3.'/'.$dir2.'/'.$file_name.'"');
  26. //die();
  27. //Сохраняем удаленно расположенный файл в созданную дирректорию
  28. $success = file_save_from_url($src, $dest_dir . $file_name);
  29.  
#7 10 марта 2024 в 14:34

Как я понял, вы собираетесь спарсенные данные сохранить в новости?

$src = $_SESSION['article']['img']['src']; тут у вас храниться полная ссылка на фото?

Далее вам надо

  1. $_POST['photo'] = $src;
  2. $this->cms_uploader->enableRemoteUpload()->setAllowedMime([
  3. 'image/jpeg',
  4. 'image/png',
  5. 'image/gif',
  6. 'image/webp'
  7. ]);
  8. $result = $this->cms_uploader->upload('photo');
  9. if ($result['success']) {
  10. try {
  11. $image = new cmsImages($result['path']);
  12. } catch (Exception $exc) {
  13. $result['success'] = false;
  14. $result['error'] = LANG_UPLOAD_ERR_MIME;
  15. }
  16. }
  17. if (!$result['success']) {
  18. if (!empty($result['path'])) {
  19. files_delete_file($result['path'], 2);
  20. }
  21. $src = null;
  22. } else {
  23. $sizes = ['small', 'content_list_small', 'content_list', 'content_item'];
  24. $result['paths'] = [];
  25. $file_context = [
  26. 'target_controller' => 'content',
  27. 'target_subject' => 'news',
  28. 'target_id' => null
  29. ];
  30. $presets = $this->model_images->orderByList([
  31. ['by' => 'is_square', 'to' => 'asc'],
  32. ['by' => 'width', 'to' => 'desc']
  33. ])->getPresets();
  34. foreach ($presets as $p) {
  35.  
  36. if (!in_array($p['name'], $sizes, true)) {
  37. continue;
  38. }
  39.  
  40. $resized_path = $image->resizeByPreset($p);
  41.  
  42. if (!$resized_path) {
  43. continue;
  44. }
  45.  
  46. $result['paths'][$p['name']] = $resized_path;
  47.  
  48. if ($file_context['target_controller']) {
  49. $this->controller_images->registerUploadFile($file_context);
  50. }
  51.  
  52. $this->controller_images->registerFile(['path' => $resized_path]);
  53. }
  54. // Удаляем или регистрируем оригинал
  55. if (!in_array('original', $sizes, true)) {
  56.  
  57. files_delete_file($result['path'], 2);
  58.  
  59. } else {
  60.  
  61. if ($file_context['target_controller']) {
  62. $this->registerUploadFile($file_context);
  63. }
  64.  
  65. $this->registerFile(['path' => $result['url']]);
  66. }
  67. $src = $result['paths'];
  68. }
  69.  
#8 11 марта 2024 в 08:42

Спасибо. Попробую.

Добавлено спустя 16 часов

Как я понял, вы собираетесь спарсенные данные сохранить в новости?

$src = $_SESSION['article']['img']['src']; тут у вас храниться полная ссылка на фото?

Далее вам надо

My-InstantCMS.Ru

Сохраняю спарсенные данные в новости, а на странице просмотра фото выводится 64*64. Почему не берется из папки для conten_item? https://my-addons.ru/news/37-podschitana-vygoda-rossii-ot-perenapravlenija-postavok-syrja.html

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

Создаются такие пути: ---
content_item: 000/u1/3/c/3cd440af.webp
content_list: 000/u1/b/2/d61b4be7.webp
content_list_small: 000/u1/7/f/84add62f.webp
small: 000/u1/5/d/8cbb7312.jpg

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

Код экшена такой: 

  1. <?php
  2.  
  3. class actionParsingrssSaveNew extends cmsAction{
  4.  
  5. public function run(){
  6.  
  7. $h1 = $_SESSION['article']['h1'];
  8. $src = $_SESSION['article']['img']['src'];
  9. $text = $_SESSION['article']['p'];
  10. $h = explode('/', $src);
  11. $file_name = $h[count($h) - 1];
  12.  
  13. //=====================================================
  14. $_POST['photo'] = $src;
  15.  
  16. $this->cms_uploader->enableRemoteUpload()->setAllowedMime([
  17. 'image/jpeg',
  18. 'image/png',
  19. 'image/gif',
  20. 'image/webp'
  21. ]);
  22. $result = $this->cms_uploader->upload('photo');
  23. //print_r($result);
  24. //die();
  25.  
  26. if ($result['success']) {
  27. try {
  28. $image = new cmsImages($result['path']);
  29. } catch (Exception $exc) {
  30. $result['success'] = false;
  31. $result['error'] = LANG_UPLOAD_ERR_MIME;
  32. }
  33. }
  34. if (!$result['success']) {
  35. if (!empty($result['path'])) {
  36. files_delete_file($result['path'], 2);
  37. }
  38. $src = null;
  39. } else {
  40. $sizes = ['content_item', 'content_list', 'content_list_small', 'small'];
  41. $result['paths'] = [];
  42. $file_context = [
  43. 'target_controller' => 'content',
  44. 'target_subject' => 'news',
  45. 'target_id' => null
  46. ];
  47. $presets = $this->model_images->orderByList([
  48. ['by' => 'is_square', 'to' => 'asc'],
  49. ['by' => 'width', 'to' => 'desc']
  50. ])->getPresets();
  51. foreach ($presets as $p) {
  52.  
  53. if (!in_array($p['name'], $sizes, true)) {
  54. continue;
  55. }
  56.  
  57. $resized_path = $image->resizeByPreset($p);
  58.  
  59. if (!$resized_path) {
  60. continue;
  61. }
  62.  
  63. $result['paths'][$p['name']] = $resized_path;
  64. //print_r($resized_path);
  65. //die();
  66.  
  67. if ($file_context['target_controller']) {
  68. $this->controller_images->registerUploadFile($file_context);
  69. }
  70.  
  71. $this->controller_images->registerFile(['path' => $resized_path]);
  72. }
  73. //Удаляем или регистрируем оригинал
  74. if (!in_array('original', $sizes, true)) {
  75.  
  76. files_delete_file($result['path'], 2);
  77.  
  78. } else {
  79.  
  80. if ($file_context['target_controller']) {
  81. $this->registerUploadFile($file_context);
  82. }
  83.  
  84. $this->registerFile(['path' => $result['url']]);
  85. }
  86. $src = $result['paths'];
  87. }
  88. $content = cmsCore::getController('content');
  89. $content->request->set('csrf_token', cmsForm::getCSRFToken());
  90. $content->request->set('photo', $src);
  91. $content->request->set('category_id', 3);
  92. $content->request->set('is_private', 0);
  93. $content->request->set('date_pub', $today);
  94. $content->request->set('title', $h1);
  95. $content->request->set('teaser', $h1);
  96. $content->request->set('submit', 'Сохранить');
  97. $content->request->set('ctype_name', 'news');
  98. $content->request->set('is_comments_on', 1);
  99. $content->request->set('is_pub', 1);
  100. $content->request->set('content', $text);
  101. //$content->request->set('back', $_SERVER['HTTP_REFERER']);
  102. $content->runAction('item_add');
  103.  
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.