Объединение выводов картинки ресурса

Здравствуйте!

Возможно кто-то сталкивался с вопросом. Пока не удалось добиться результата.
Стоит задача настроить новую галерею, я ратую за ms2Gallery, но пока не могу добиться показательного результата. Основная проблема — объединение выводов картинок ресурса. То есть чтобы несколько тысяч картинок добавленных старым способом выводились наряду с новыми ресурсами. где картинки добавлены новым способом. Пока тестирую всё на тестовом сайте, поэтому вариации как проба — возможны любые.

Старый вывод использует TV и getResource, впрочем нормально работает с Pdo
[[!getPage? &element=`getResources` &parents=`2` &tpl=`article.tpl` &includeContent=`1` &includeTVs=`1` &processTVs=`1` &limit=`30` &hideContainers=`1`]
На первом этапе решения проблемы экспериментировал с тем, что бы подобрать такой вывод, который сможет выводить и картинки из TV, и картинки из Ms2G.

В крайнем случае, найти автоматизированный способ переместить все старые картинки в галерею, в соответствующих ресурсах.

Буду благодарен за подсказки и любую помощь!
Александр Н
23 сентября 2016, 20:13
modx.pro
1
1 693
0

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

Александр
25 сентября 2016, 07:35
+1
Лично я бы работал бы с базой напрямую.
1) Делаем выборку по нужному тв в phpmyadmin
2) Выгружаем это в csv.
3) Смотрим, что база хранит все картинки в таблице ms2_resource_files
4) Нам нужны поля: a)resource_id, b)source, c)path, d)file,e)name, и f)active
a) — из импорта пункта b
b) — если все картинки хранятся в одной папке — копируем источник файлов от ms2gallery, настраиваем его и указываем нужные пути к старой папке. Указываем id нового источника файлов
c) путь от этой папки, или просто /, если лежат в корне.
d) из импорта — имя файла. (если имя файла лежит в подпапке, обрезаем макросами или формулой excel)
e) Тоже, что и d, только без расширения.
f) 1
e) type поле можно поставить Image.

После чего — заливаем в админку (в phpmyadmin есть импорт csv) и используем скрипт перегенерации превьюшек:

<?php
define('MODX_API_MODE', true);
require 'index.php';

$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');

$modx->addPackage('ms2gallery', MODX_CORE_PATH . 'components/ms2gallery/model/');
$files = $modx->getIterator('msResourceFile', array('parent' => 0));
foreach ($files as $file) {
    $children = $file->getMany('Children');
    foreach ($children as $child) {
        $child->remove();
    }
    $file->generateThumbnails();
}

echo microtime(true) - $modx->startTime;
Просто скопируйте и вставьте в файл в корне сайта (или измените путь к index.php).
Запускать лучше из консоли сервера, так как, в зависимости от количества загруженных файлов, может понадобиться какое-то время для работы.

Источник
    Александр Н
    25 сентября 2016, 07:54
    0
    Благодарю Александр! Попробую сделать на Вашем примере
    Насим
    06 октября 2016, 13:24
    0
    Получается надо создать папку с айди ресурса, положить туда оригинал и рядом создать папки превьюшек. Перенести запись оригинала в БД и генерировать вышеприведённым скриптом превьюшки.

    Как то моно генерировать сами папки, хеш и свойства оригинала? ({«size»:13844,«width»:220,«height»:200,«bits»:8,«mime»:«image\/jpeg»})
      Насим
      07 октября 2016, 11:25
      0
      Папки для превьюшек создавать не надо, скрипт сам создаст. И без хеша и свойств тоже можно вроде как обойтись.

      Есть способ перенести картинки по папкам по названию айди ресурса?
        Александр Н
        12 октября 2016, 01:17
        0
        Возможно кому-то однажды пригодиться…
        Для переноса картинок я приспособил следующие инструменты

        — Подготовил csv. Для этого оставил только два поля: id и путь к старым картинкам

        — Загрузил csv на сервер, и нужно дополнительно почистить файл от символов переноса каретки
        tr -d "\r" < test.csv > test2.csv

        — Теперь необходимо выполнить скрипт, который создаст нужные каталоги и перенесёт нужные картинки в эти каталоги. В позаимствованном скрипте разбора csv, использовал только два первых значения: Host и Group, для первых двух полей в строке. Скрипт запускаю от рута, предварительно выставлены права +x.
        #!/bin/bash
        INPUT=test2.csv
        OLDIFS=$IFS
        IFS=";"
        [ ! -f $INPUT ] &while read Host Group itItemType itKey itValueType itDescription itDelay itHistory itTrends itDataType itUnits itMultiplier itDelta itFormula itParams itSnmpCom itSnmpOid itApplication
        do
                mkdir -p assets/images/resources/"$Host"
                cp "$Group" assets/images/resources/"$Host"/
        done < $INPUT
        IFS=$OLDIFS

        Довольно шустро было разобрано около 9 тысяч строк и скопировано столько же картинок.

        — Осталось сгенерировать превью, используя скрипт которым поделился Александр.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5