Не срабатывает OnFileManagerUpload при загрузке файлов в галерею ресурсов

Перепишу вопрос с учетом того что открылось. Не срабатывает системное событие OnFileManagerUpload при загрузке файлов в галерею ресурсов. куда смотреть, куда копать подскажите? та же история с транслитом. Работает при загрузке в файлоовую систему, но не при загрузке в рессурсы
Сергей С
Сергей С
27 августа 2023, 21:50
modx.pro
1 304
Реклама

Комментарии: 19

Артур Шевченко
Артур Шевченко Старожил
27 августа 2023, 23:34
Если в документации про это не написано, можно попробовать в админке рядом с системными настройками по группе ms2Gallery поискать, или скопировать файлы на локалку и через ide по файлам поискать invokeEvent
    Сергей С
    Сергей С Старожил
    27 августа 2023, 23:50
    В документации нету. Группы у ms2gallery тоже нет. По файлам поискать хорошая мысль. Спасибо! Подожду ещё может кто подскажет само событие
    Николай Савин
    Николай Савин Администратор
    28 августа 2023, 08:18
    В msGallery и ms2Gallery никаких событий нет, и не предвидится.
    По простой причине — они сами по себе никак файлами не управляют, не загружают, и даже не знают, где эти файлы лежат по сути.
    Они только обрабатывают входящие команды и передают массив данных загрузчику MODX, который в свою очередь передает команду на загрузку (или другие операции) источнику файлов.
    Источник файлов может быть разным, не только локальным. К примеру на какой-нибудь S3 Amazon загружать.

    Вывод — пользоваться встроенными событиями на загрузку MODX.
      Сергей С
      Сергей С Старожил
      28 августа 2023, 08:27
      Встроеные события по какой то причине не реагируют на загрузку ms2gallery. Плагин повесил с логом на OnFileManagerUpload. На стандартный загрузчик реагирует на ms2gallery нет. В чем может быть причина?
        Сергей С
        Сергей С Старожил
        28 августа 2023, 08:32
        Проблема изначально в том что перестал работать translite совместно с ms2gallery. просто .jpg фзаписывает файл если он с кириллицей. А теперь еще и события не срабатывают. При этом сама загрузка проходит штатно
        Dan
        Dan Старожил
        28 августа 2023, 11:11
        Это событие бесполезно будет, оно не сработает. Используй событие OnFileManagerFileCreate
        <?php
        switch($modx->event->name) { 
            case 'OnFileManagerFileCreate':
                $modx->log(1, print_r($path, 1)); //в лог выведет пути к полному размеру и миниатюрам
            	break;
        }
        Вообще стоит взять в привычку либо код прикладывать имеющийся, либо описывать задачу. Тогда и ответы будут точными — вдруг вашу задачу можно решить по другому, или может у вас ошибка в коде.
          Сергей С
          Сергей С Старожил
          28 августа 2023, 11:18
          Да тут просто кода нет Плагин сейчас так выглядит <?php
          switch ($modx->event->name) {
          case 'OnFileManagerUpload':
          $modx->log(1, 'запущен плагин перемименование');
          }
            Dan
            Dan Старожил
            28 августа 2023, 11:26
            Как и написал в комменте, используйте событие OnFileManagerFileCreate. Просто опять же непонятно, какую цель вы преследуете.
              Сергей С
              Сергей С Старожил
              28 августа 2023, 11:38
              С этим событием работает отлично! Цель-переименование файлов на этапе загрузки. И вот теперь тут возникает вопрос:OnFileManagerFileCreate что еще можно получить кроме $path?
              _________________
              source Нашел уже. Спасибо
                Николай Савин
                Николай Савин Администратор
                28 августа 2023, 14:37
                Для получения входящих переменных можно использовать следующий код
                $modx->log(1, print_r(array_keys($scriptProperties), 1));
                Сергей С
                Сергей С Старожил
                28 августа 2023, 13:03
                Возможно я что-то не так делаю, но $source выводит огромный массив данных.Всю информацию о загрузке и созании файлов. Как оттуда выцепить информацию о файле для его переименовании. Или никак?
                  Николай Савин
                  Николай Савин Администратор
                  28 августа 2023, 14:39
                  Ты получаешь объект, а не массив данных. Его нельзя распечатывать.
                  Используй тогда уж
                  $source->toArray();
                  Только это вероятно будет бесполезная распечатка. Потому что здесь идет речь об источнике файлов, а не о передаваемом файле
                    Сергей С
                    Сергей С Старожил
                    28 августа 2023, 14:49
                    да. И правда бесполезно. Выцеплять оттуда что-либо очень громоздко будет
                    Dan
                    Dan Старожил
                    28 августа 2023, 16:28
                    Не понимаю в чем проблема. Конечная цель — переименовать файлы, верно? Ну дык ты же получаешь путь к загруженному файлу на событие OnFileManagerFileCreate. Переименуй его с помощью rename. Или это не полная задача снова?
                      Сергей С
                      Сергей С Старожил
                      28 августа 2023, 16:47
                      Переименовать получается не проблема, но нужно еще их в modx_ms2_resource_files и modx_ms2_product_files переписать, иначе они просто отвалятся от ресурса. И тут пока не работает почему-то.
                      $this_path = str_replace(MODX_ASSETS_PATH, "", $path);
                              	$offset = isset($_SESSION['galgenoffset']) && $_SESSION['galgenoffset'] ? $_SESSION['galgenoffset'] : 0;
                      			$ms2Gallery = $modx->getService('ms2gallery', 'ms2Gallery', MODX_CORE_PATH . 'components/ms2gallery/model/ms2gallery/');
                      
                      			$q = $modx->newQuery('msResourceFile', array("url" => $this_path));
                      			$modx->log(1, print_r($this_path, 1));
                      			$total = $modx->getCount('msResourceFile', $q);
                      $total получается 0 хотя файл то по этому урл создан.
                      если $this_path прописать
                      $this_path = '/assets/images/resources/91084/.jpg';

                      то файлы считает
                      ну и собственно тогда файлы получаю
                      $q->sortby('resource_id', 'ASC');
                      			$q->sortby('rank', 'DESC');
                      			$q->limit(99);
                      			$q->where(array("url" == $this_path));
                      			$resources = $modx->getCollection('msResourceFile',$q);
                      Почему из переменной не хочет получать?
                        Сергей С
                        Сергей С Старожил
                        29 августа 2023, 09:42
                        Теперь даже не понимаю или моя проблема слишком глупая, что никто даже комментировать не хочет ))) или слишком сложная, что никто не знает ответа
                          Николай Савин
                          Николай Савин Администратор
                          29 августа 2023, 10:12
                          Я бы сказал, что твоя проблема в том, что не хочешь сам пошагово разбирать, что пишешь, как устроена работа с файлами в PHP. Проще спросить, чтобы другие думали. А другим это не всегда удобно.
                          Давай по порядку.
                          1. В таблицу пишется не абсолютный путь файла, а относительный. Не удивительно, что применяя MODX_ASSETS_PATH ты ничего не находишь. Используй просто /assets/ или если хочешь MODX_ASSETS_URL.
                          2. Это что за запись такая? Откуда такой синтаксис?
                          $q->where(array("url" == $this_path));
                          Правильно будет вот так

                          $q->where(array("url" => $this_path));

                          3. Используй getIterator вместо getCollection этот метод потребляет меньше памяти.
                            Сергей С
                            Сергей С Старожил
                            29 августа 2023, 10:34
                            1. Да, это сразу исправил выырезал из path все до assets и оставил '/assets/images/resources/91084/.jpg'. Проверял в логи выводит все верно
                            2.Этой строки нет больше, ошибку сразу исправил с => не работает это выдает ошибку
                            [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND `msResourceFile`.`url` = '/assets/images/resources/91084/thumb/.jpg' ) ORDE' at line 1
                            3Хорошо. ТОлько пока не работает в любом случае.
                            $q = $modx->newQuery('msResourceFile', array("url" => $this_path));
                            вот в этой строке не берет из переменной данные никак
                              Сергей С
                              Сергей С Старожил
                              29 августа 2023, 11:35
                              Походу я понял в чем проблема.Но не понимаю откуда она берется. К примеру загружаем фото путь к которому /assets/images/resources/91084/.jpg соответственно генерируются миниатюры в thumb, small. Запускается плагин:
                              $q = $modx->newQuery('msResourceFile', array('url' => '/assets/images/resources/91084/.jpg'));
                              $total = $modx->getCount('msResourceFile', $q);
                              $modx->log(1, print_r($total, 1));
                              Когда получаю результаты $total начинает считаться только с генерации thumb. У базового файла так и стоит $tota 0. Довольно странно.Как и В результатах по ним ниже
                              Полностью код так выглядит
                              q = $modx->newQuery('msResourceFile', array('url' => '/assets/images/resources/91084/.jpg'));
                              			$this_path = $path_parts['dirname'].''.$path_parts['basename'];
                              			$modx->log(1, print_r($this_path, 1));//В логи пишет как и должен /assets/images/resources/91084/.jpg'
                              			$total = $modx->getCount('msResourceFile', $q);
                              			$modx->log(1, print_r($total, 1));
                              			$q->sortby('resource_id', 'ASC');
                              			$q->sortby('rank', 'DESC');
                              			$q->limit(99);
                              			$resources = $modx->getIterator('msResourceFile',$q);
                              			foreach ($resources as $resource) {
                              				$modx->log(1, print_r('обход',1));
                              				$modx->log(1, print_r('____________________________________________', 1));
                              				$modx->log(1, print_r('$resource->url'.$resource->url, 1));
                              				$modx->log(1, print_r('$resource->file'.$resource->file, 1));
                              				$modx->log(1, print_r('____________________________________________', 1));
                              			}
                              Результат:
                              /assets/images/resources/91084.jpg
                              0
                              
                              /assets/images/resources/91084/thumb.jpg
                              1
                              обход
                              ____________________________________________
                              $resource->url/assets/images/resources/91084/.jpg
                              $resource->file.jpg
                              ____________________________________________
                              
                              /assets/images/resources/91084/small.jpg
                              1
                              обход
                              ____________________________________________
                              $resource->url/assets/images/resources/91084/.jpg
                              $resource->file.jpg
                              ____________________________________________
                              Думаю что когда передаю в переменной «url» по каждому файлу, он его так же пропускает просто т.к. этот файл только что создан. и сможет его найти в таблице только при запуске плагина на другом файле. Странно…
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  19