Павел Гвоздь

Павел Гвоздь

С нами с 31 мая 2015; Место в рейтинге пользователей: #2
Павел Гвоздь
06 июля 2016, 14:29
0
Я чуть больше полу года назад попросил Евгения Борисова (автор пакета до версии 1.3.0) передать поддержку и доработки над пакетом мне, он любезно согласился, но в modx.com 1.3.1-pl выкладывал не я и в связи с этим не могу обновить пакет там. Так что исправления, которые вносил я (по корректировке кириллицы в названиях превьюх) есть только в версии 1.3.1-pl на modstore.pro. Качай отсюда.
Павел Гвоздь
06 июля 2016, 14:13
0
А откуда качал пакет? Из оф репа или модстор?
Павел Гвоздь
06 июля 2016, 13:20
+1
А какую именно кастомизацию нужно сделать? Вот код сниппета (нужно создать и указать в настройке phpthumbon.make_cachename), который выполняет всё то-же самое, что выполняется в компоненте с названиями превьюх:
// Папка в которой лежат превьюхи текущей картинки
$cacheFileDir = rtrim($phpThumbOn->_config['_cachePath'],'/').'/'.$filename;

// Для поиска других превьюх с этого же файла
$_globThumb = $cacheFileDir."_[0-9]*x[0-9]*_???.{jpeg,gif,bmp,jpg,png}";
$w = isset($phpThumbOn->_config['_options']['w']) ? $phpThumbOn->_config['_options']['w'] : 0;
$h = isset($phpThumbOn->_config['_options']['h']) ? $phpThumbOn->_config['_options']['h'] : 0;

// Уникальный суффикс в имени файла превьюхи
$_cacheSuffix = $w.'x'.$h.'_'.substr(md5(serialize($phpThumbOn->_config['_options'])),0,3);

// Кеш файл превьюхи
$_cacheFileName = $cacheFileDir . "_". $_cacheSuffix . "." . $phpThumbOn->_config['_options']['f'];

return serialize(array(
    '_cacheFileName' => $_cacheFileName,
    '_cacheSuffix' => $_cacheSuffix,
    '_globThumb' => $_globThumb,
));
Его можно подкорректировать под свои нужды.
Павел Гвоздь
03 июля 2016, 04:44
1
+1
Можно. Надо сделать выборку и перегенерировать каждый видеоролик заново.
Набросал код, который обновит видео превьюхи у всех ресурсов. Если надо разграничить только для сервиса Vimeo — нужно добавить соответствующую проверку в выборку xPDO, это совершенно не сложно.

$field = $modx->getOption('videogallery_field_image');

$q = $modx->newQuery('modResource');
$q->innerJoin('modTemplateVarResource', 'modTemplateVarResource', 'modTemplateVarResource.contentid = modResource.id');
$q->innerJoin('modTemplateVar', 'modTemplateVar', 'modTemplateVar.id = modTemplateVarResource.tmplvarid');
$q->select(array(
    'modResource.id as resource_id',
    'modTemplateVar.id as tv_id',
    'modTemplateVar.name as tv_name',
    'modTemplateVarResource.value as tv_value',
    'modTemplateVarResource.id as id',
));
$q->where(array(
    'modTemplateVar.type' => 'videoGallery',
));
$q->prepare();
$q->stmt->execute();
$rows = $q->stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($rows as $row) {
    // print_r($row);
    $data = $modx->fromJSON($row['tv_value']);
    if (is_array($data) && isset($data['video'])) {
        $old['fileurl'] = $data['image'];
        $old['filepath'] = str_replace(MODX_ASSETS_URL, MODX_ASSETS_PATH, $old['fileurl']);
        
        $resp = $modx->runProcessor('gallery/handle', array(
            'resource' => $row['resource_id'],
            'tv' => $row['tv_id'],
            'video' => $data['video'],
        ), array('processors_path' => MODX_CORE_PATH . 'components/videogallery/processors/mgr/'));
        
        $resp = $resp->response;
        // print_r($resp['object']['image'].PHP_EOL);
        
        if ($resp['success']) {
            if ($resource = $modx->getObject('modResource', array('id' => $row['resource_id']))) {
                $resource->setTVValue($row['tv_name'], $resp['object']['json']);
                $resource->save();
                
                // Если в настройках указано поле для хранения изображений - сохраним в него новый путь до картинки
                if ($field) {
                    if (stristr($field, 'tv.')) {
                        $resource->setTVValue(str_replace('tv.', '', $field), $resp['object']['image']);
                    } else {
                        $resource->set($field, $resp['object']['image']);
                    }
                    $resource->save();
                }
                
                // Удалим старое изображение
                if (file_exists($old['filepath']) && $old['fileurl'] != $resp['object']['image']) {
                    @unlink($old['filepath']);
                }
            }
        }
    }
}

print 'Done!';
Я советую запускать его из терминала, вначале скрипта подключив MODX. Потому что, если ресурсов с видеороликами хотя-бы 30-50 штук, то времени на выполнение скрипта из браузера, скорее всего, не хватит.

Подключить MODX в скрипте можно вставив этот код в самое начало:
// Подключаем MODX
define('MODX_API_MODE', true);
do {
    $dir = dirname(!empty($file) ? dirname($file) : __FILE__);
    $file = $dir . '/index.php';
    $i = isset($i) ? --$i : 10;
} while ($i && !file_exists($file));
if (file_exists($file)) {
    require_once $file;
} else {
    exit("Access denied!");
}
$modx->getService('error', 'error.modError');
$modx->getRequest();
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');
Павел Гвоздь
01 июля 2016, 12:22
+1
Если найдёте исполнителя, который сделает качественно на Битриксе, то цена будет не ниже, а чаще даже выше, чем здесь предлагают. В противном же случае — удобство пользования сайтом и качество исполнения пострадает, и даже при слабых нагрузках это будет заметно.
Павел Гвоздь
01 июля 2016, 12:05
+1
Ну разве что 150-170 после некоторых уточнений по реализации описанных функций.
Павел Гвоздь
01 июля 2016, 01:38
+2
Очень классно получилось! Ещё было бы круто, чтоб после редактирования обновлялось содержимое страницы. :)
Павел Гвоздь
28 июня 2016, 17:01
0
Покажи, как надо, пожалуйста, в соседнем топике.
Павел Гвоздь
27 июня 2016, 11:33
0
Привет! Странно, сейчас проверил у себя, запроса нет. Может пароль от root юзера просит? Потому что в скриптах такого запроса нет.
А файлы сайтов и базы появились на Яндекс Диске?
Павел Гвоздь
16 июня 2016, 22:50
+1
Обновляйтесь до версии 1.1.3-beta

1.1.3-beta (17.06.2016)
==============
— В сниппеты tvssResources и tvssTickets добавлен параметр &like, который отвечает за способ выборки. Если указан &like=`1`, то при выводе ресурсов по тегу «еда», в результаты будут добавлены ресурсы с тегом «педагог». Если же &like=`0`, то поиск по тегам осуществляется точный. По-умолчанию &like=`0`.
Павел Гвоздь
16 июня 2016, 19:21
0
Не понял вопроса. Где искать? Каким способом реализован поиск?
Павел Гвоздь
14 июня 2016, 02:04
0
Нужно будет допиливать под такие нужды.
Павел Гвоздь
14 июня 2016, 02:00
0
Доброе утро! Планов много, даже очень, но вот времени на это катастрофически мало.
Павел Гвоздь
13 июня 2016, 08:25
0
Спасибо, Василий, оказывается в $_FILES всё есть! И всё-же я не понимаю, почему, если из бекенда такое проделать, то временный файл будет в $this->getProperty('file'), а если из фронта через Office, то только из $_FILES доставать… Вопрос скорее риторический. Спасибо за помощь!