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

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

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

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

    Вывод — пользоваться встроенными событиями на загрузку MODX.
      Сергей С
      28 августа 2023, 08:27
      0
      Встроеные события по какой то причине не реагируют на загрузку ms2gallery. Плагин повесил с логом на OnFileManagerUpload. На стандартный загрузчик реагирует на ms2gallery нет. В чем может быть причина?
        Сергей С
        28 августа 2023, 08:32
        0
        Проблема изначально в том что перестал работать translite совместно с ms2gallery. просто .jpg фзаписывает файл если он с кириллицей. А теперь еще и события не срабатывают. При этом сама загрузка проходит штатно
        Dan
        Dan
        28 августа 2023, 11:11
        +1
        Это событие бесполезно будет, оно не сработает. Используй событие OnFileManagerFileCreate
        <?php
        switch($modx->event->name) { 
            case 'OnFileManagerFileCreate':
                $modx->log(1, print_r($path, 1)); //в лог выведет пути к полному размеру и миниатюрам
            	break;
        }
        Вообще стоит взять в привычку либо код прикладывать имеющийся, либо описывать задачу. Тогда и ответы будут точными — вдруг вашу задачу можно решить по другому, или может у вас ошибка в коде.
          Сергей С
          28 августа 2023, 11:18
          0
          Да тут просто кода нет Плагин сейчас так выглядит <?php
          switch ($modx->event->name) {
          case 'OnFileManagerUpload':
          $modx->log(1, 'запущен плагин перемименование');
          }
            Dan
            Dan
            28 августа 2023, 11:26
            0
            Как и написал в комменте, используйте событие OnFileManagerFileCreate. Просто опять же непонятно, какую цель вы преследуете.
              Сергей С
              28 августа 2023, 11:38
              0
              С этим событием работает отлично! Цель-переименование файлов на этапе загрузки. И вот теперь тут возникает вопрос:OnFileManagerFileCreate что еще можно получить кроме $path?
              _________________
              source Нашел уже. Спасибо
                Николай Савин
                28 августа 2023, 14:37
                0
                Для получения входящих переменных можно использовать следующий код
                $modx->log(1, print_r(array_keys($scriptProperties), 1));
                Сергей С
                28 августа 2023, 13:03
                0
                Возможно я что-то не так делаю, но $source выводит огромный массив данных.Всю информацию о загрузке и созании файлов. Как оттуда выцепить информацию о файле для его переименовании. Или никак?
                  Николай Савин
                  28 августа 2023, 14:39
                  0
                  Ты получаешь объект, а не массив данных. Его нельзя распечатывать.
                  Используй тогда уж
                  $source->toArray();
                  Только это вероятно будет бесполезная распечатка. Потому что здесь идет речь об источнике файлов, а не о передаваемом файле
                    Сергей С
                    28 августа 2023, 14:49
                    0
                    да. И правда бесполезно. Выцеплять оттуда что-либо очень громоздко будет
                    Dan
                    Dan
                    28 августа 2023, 16:28
                    0
                    Не понимаю в чем проблема. Конечная цель — переименовать файлы, верно? Ну дык ты же получаешь путь к загруженному файлу на событие OnFileManagerFileCreate. Переименуй его с помощью rename. Или это не полная задача снова?
                      Сергей С
                      28 августа 2023, 16:47
                      0
                      Переименовать получается не проблема, но нужно еще их в 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
                        0
                        Теперь даже не понимаю или моя проблема слишком глупая, что никто даже комментировать не хочет ))) или слишком сложная, что никто не знает ответа
                          Николай Савин
                          29 августа 2023, 10:12
                          +1
                          Я бы сказал, что твоя проблема в том, что не хочешь сам пошагово разбирать, что пишешь, как устроена работа с файлами в 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
                            0
                            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
                              0
                              Походу я понял в чем проблема.Но не понимаю откуда она берется. К примеру загружаем фото путь к которому /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