Программный импорт тэгов в ms2Gallery
        Здравствуйте. Собственно вопрос: как программно импортировать теги в ms2Gallery через процессор? Картинки то я знаю как заливать, а вот теги что-то не заливаются.    
    
    
                                                                                
            Комментарии: 8
                Я делал upload файла через процессор, после чего так:
                    $file = $modx->getObject('msResourceFile', $response->response['object']['id']);
$file->set('name', $name);
$file->save();            
                В любом случае спасибо за ответ, но это не то. Вы писали значение в таблицу ms2_resource_files в колонку name, теги записываются несколько иначе. Лежат они в таблице ms2_resource_files_tags где имеется две колонки file_id и tag.            
                    
                Как я пробовал:
В БД на выходе получается вообще вот такое горе:
                    <?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_titlesArray
(
    [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, вообще ничего не происходит.            
                Мой вариант конечно работает, но блин криво) Не всегда теги совпадают с сортировкой 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 только что созданного объекта, чтобы передать его дальше.
       
}            $response->response['object']['id']у меня данный вариант 100% рабочий.            
                У меня в object отдает только 'thumb' => бла бла бла. Может при интеграции галереи с минишопом немного другое поведение процессоров…            
                    
                В общем с процессорами ничего у меня не вышло, не стал заморачиваться и сделал так, теперь все ок:
                    <?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();
}Решено.            
                Блин, добавил вот это
                    print ('<pre>');
print_r ($response->response);Получается что, ms2gallery не отдает в response id только что созданного объекта? Или я что-то не так делаю? Как же тогда корректно импортировать теги. 200 000 тегов вообще не прикольно в ручную забивать будет…            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.