Программный импорт тэгов в ms2Gallery

Здравствуйте. Собственно вопрос: как программно импортировать теги в ms2Gallery через процессор? Картинки то я знаю как заливать, а вот теги что-то не заливаются.
Alex
29 июня 2017, 06:42
modx.pro
1 646
0

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

Наумов Алексей
29 июня 2017, 10:01
0
Я делал upload файла через процессор, после чего так:
$file = $modx->getObject('msResourceFile', $response->response['object']['id']);
$file->set('name', $name);
$file->save();
    Alex
    29 июня 2017, 10:31
    0
    В любом случае спасибо за ответ, но это не то. Вы писали значение в таблицу ms2_resource_files в колонку name, теги записываются несколько иначе. Лежат они в таблице ms2_resource_files_tags где имеется две колонки file_id и tag.
      Alex
      29 июня 2017, 10:46
      0
      Как я пробовал:
      <?php
      $resource_id = '22';
      
      $modx->ms2Gallery = $modx->getService('ms2gallery', 'ms2Gallery', MODX_CORE_PATH . 'components/ms2gallery/model/ms2gallery/');
      $prefix = $modx->config['table_prefix'];
      
      $sql = "SELECT tag FROM {$prefix}ms2_resource_files_tags";
      $q = $modx->prepare($sql);
      $q->execute();
      $tags_arr = $q->fetchAll(PDO::FETCH_ASSOC);
      
      $sql = "SELECT id FROM {$prefix}ms2_resource_files WHERE `resource_id` = {$resource_id} AND `parent` = 0";
      $q = $modx->prepare($sql);
      $q->execute();
      $ms2Gallery_arr = $q->fetchAll(PDO::FETCH_ASSOC);
      
      foreach ($ms2Gallery_arr as $k => $ms2Gallery_ids) {
          foreach ($ms2Gallery_ids as $v){
              $ms2Gallery_id[$k] = $v;
          }
          
      }
      $img_titles = array(
                  'черный','черный','черный','белый','белый','белый','бежевый','бежевый','бежевый','черный',
          
          );
      $img_arr = array_combine($ms2Gallery_id,$img_titles);
          
          
      foreach ($img_arr as $img_key => $img_value) {
            
              $response = $modx->runProcessor('gallery/update', array(
                      'id' => $img_key,
                      'tag' => $img_value,
                  ),
                  array('processors_path' => MODX_CORE_PATH . 'components/ms2gallery/processors/mgr/')
              );
              if ($response->isError()) {
                  print_r($response->getAllErrors());
              } else {
                  print ('<p style="color: green;">Картинки успешно обновлены</p>');
              }
             
      }
      Знычения массива
      $ms2Gallery_id
      :
      Array
      (
          [0] => 601
          [1] => 599
          [2] => 597
          [3] => 595
          [4] => 593
          [5] => 591
          [6] => 589
          [7] => 587
          [8] => 585
          [9] => 583
      )
      Значения массива
      $img_titles
      Array
      (
          [0] => черный
          [1] => черный
          [2] => черный
          [3] => белый
          [4] => белый
          [5] => белый
          [6] => бежевый
          [7] => бежевый
          [8] => бежевый
          [9] => черный
      )
      Затем объединяем эти два массива в один и получаем массив
      $img_arr
      :
      Array
      (
          [601] => черный
          [599] => черный
          [597] => черный
          [595] => белый
          [593] => белый
          [591] => белый
          [589] => бежевый
          [587] => бежевый
          [585] => бежевый
          [583] => черный
      )
      Потом ключи использую как id картинки, а значения как tag.
      В БД на выходе получается вообще вот такое горе:
      file_id   tag
      366     черный
      368     черный
      370     черный
      372     черный
      374     черный
      376     черный
      378     черный
      380     черный
      382     черный
      Пробовал и процессор savetags, вообще ничего не происходит.
        Alex
        03 июля 2017, 06:51
        0
        Мой вариант конечно работает, но блин криво) Не всегда теги совпадают с сортировкой id. Тот вариант, который вы подсказали точно рабочий? Просто у меня вообще не работает это дело. Может кто-то может подсказать, как получить id только что созданного объекта?
        foreach ($values['files'] as $file_key => $file_tag) {
                    // Вызов процессора загрузки
                    $response = $modx->runProcessor('gallery/upload', array(
                            'file' => $file_key,
                            'id' => $resource_id,
                        ),
                        array('processors_path' => MODX_CORE_PATH . 'components/ms2gallery/processors/mgr/')
                    );
        
               // И здесь нужно получить ID только что созданного объекта, чтобы передать его дальше.
               
        }
          Наумов Алексей
          03 июля 2017, 09:38
          0
          $response->response['object']['id']
          у меня данный вариант 100% рабочий.
            Alex
            03 июля 2017, 12:06
            0
            У меня в object отдает только 'thumb' => бла бла бла. Может при интеграции галереи с минишопом немного другое поведение процессоров…
        Alex
        01 июля 2017, 16:31
        1
        0
        В общем с процессорами ничего у меня не вышло, не стал заморачиваться и сделал так, теперь все ок:
        <?php
        $resource_id = '22';
        
        $modx->ms2Gallery = $modx->getService('ms2gallery', 'ms2Gallery', MODX_CORE_PATH . 'components/ms2gallery/model/ms2gallery/');
        $prefix = $modx->config['table_prefix'];
        
        $sql = "SELECT id FROM {$prefix}ms2_resource_files WHERE `resource_id` = {$resource_id} AND `parent` = 0 ORDER BY id ASC";
        $q = $modx->prepare($sql);
        $q->execute();
        $ms2Gallery_arr = $q->fetchAll(PDO::FETCH_ASSOC);
        
        foreach ($ms2Gallery_arr as $k => $ms2Gallery_ids) {
            foreach ($ms2Gallery_ids as $v){
                $ms2Gallery_id[$k] = $v;
            }
        }
        $img_titles = array(
                    'черный','черный','черный','белый','белый','белый','бежевый','бежевый','бежевый','черный',
                );
        $img_arr = array_combine($ms2Gallery_id,$img_titles);
        
        foreach ($img_arr as $img_key => $img_value){
            $newTag = $modx->newObject('msResourceFileTag');
            $newTag->set('file_id', $img_key);
            $newTag->set('tag', $img_value);
            $newTag->save();
        }
        Решено.
          Alex
          03 июля 2017, 07:06
          0
          Блин, добавил вот это
          print ('<pre>');
          print_r ($response->response);
          Получается что, ms2gallery не отдает в response id только что созданного объекта? Или я что-то не так делаю? Как же тогда корректно импортировать теги. 200 000 тегов вообще не прикольно в ручную забивать будет…
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            8