Программный импорт тэгов в 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_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, вообще ничего не происходит.
Мой вариант конечно работает, но блин криво) Не всегда теги совпадают с сортировкой 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 тегов вообще не прикольно в ручную забивать будет…
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.