Alexey Medvedev

Alexey Medvedev

С нами с 10 августа 2017; Место в рейтинге пользователей: #93
Alexey Medvedev
22 августа 2017, 10:20
+1
Я не про то, что будет плохо работать или не будет работать, а про то, что нужно учитывать и возможности других пользователей. Да, можно настроить сервер для оптимизации через shell и это будет безопасно. Но не все пользователи понимают, как правильно настроить сервер. Компонент рассчитан на использование в массах. В дальнейшем сделаю использование разных компрессоров, не только tinypng. Например, как при работе с кэшем — можно использовать APC/MemCache или написать свой — тут будет по аналогии, просто указать класс для работы с компонентом.
Alexey Medvedev
22 августа 2017, 10:09
0
Он использует другой способ загрузки файлов из xPDO. Я уже написал ему.
Нет смысла создавать новый event. В том способе используется другой event — 'OnFileManagerFileCreate'. Просто при написании плагина, я проверял компоненты fastuploadtv и gallery, даже не предполагал, что будет использоваться функция 'createObject' из класса 'modFileMediaSource' в каких-то компонентах.
Alexey Medvedev
22 августа 2017, 10:05
0
yadi.sk/d/21zsiED_3MDcdi — тут транспортный пакет.
Обновиться просто. Откройте Установщик в админке, найдите пакет tinycompressor, нажмите удалить, принудительное удаление, загрузите новый пакет и установите.
К сожаление, не успел написать логику на обновление.

UPD: отправил на почту транспортный пакет.
Alexey Medvedev
22 августа 2017, 09:48
0
Обновил компонент для работы с minishop2 галереей. Уточню у Василия почему он использует 'createObject', вместо 'uploadObjectsToContainer'. Event-плагин при загрузке файла в галерее minishop нужно вешать на событие 'OnFileManagerFileCreate'
Alexey Medvedev
22 августа 2017, 07:19
0
Я просмотрю, как в minishop2 загружаются изображения. Вы используете ms2Gallery для работе с галереей или встроенную в minishop2?
Alexey Medvedev
22 августа 2017, 07:06
0
Я тогда предполагаю, что minishop2 использует другой способ загрузки файлов, не использующий 'uploadObjectsToContainer' в xPDO. Поковыряю его, тоже.
Alexey Medvedev
22 августа 2017, 07:02
0
Пожалуйста, если Вас не затруднит, отправьте изображение на daddy@fuckthesystem.ml
Спасибо.
Alexey Medvedev
21 августа 2017, 23:34
0
Всё было бы отлично, если бы Вы использовали свой сервер, который можете настроить под себя — тогда и использование многих компонентов не требовалось. К тому же сжатие pngquant в php делается через shell_exec. Да и пихать в неё неизвестный файл (загружаемый пользователем) через shell — это как «кинуть булыжник в стекло» в плане безопасности, где стекло это защита сервера. Всё равно, спасибо за Ваш комментарий, я для себя поставил заметку, что можно использовать дополнительные классы для компрессии изображения на выбор пользователя в зависимости от настроек сервера.
Alexey Medvedev
11 августа 2017, 17:01
1
0
Не за что. Короткий вариант (не закончил js-код).
$resource = ($resource instanceof modResource) 
            ? 
            $modx->getObject('modResource',$resource->get('id')) 
            : $modx->getObject('modResource',(int)$resource);
if ( $resource instanceof modResource ) {
	$modx->regClientStartupHTMLBlock('
		<script>
			Ext.onReady(function(){
				if (MODx.ux.Ace.replaceTextAreas) {
					MODx.ux.Ace.replaceTextAreas(Ext.query(".x-form-textarea"));
				}
			})
		</script>
	');
}
Alexey Medvedev
11 августа 2017, 16:56
6
0
Знаю, что прошло три года, но может кому пригодится. Это кусок моего плагина. (там ещё RTE подключается для определенные категорий ресуров)

создаем плагин, событие на «OnDocFormRender» с кодом:
$script = '';
$resource = ($resource instanceof modResource) 
            ? 
            $modx->getObject('modResource',$resource->get('id')) 
            : $modx->getObject('modResource',(int)$resource);

// ACE
// Настройка под определенный тв-параметр в шаблоне
$templates_enable = array( // [id-шаблона] => array('tv[id-тв]')
    '3' => array('tv14'),
    '4' =>  array('tv14')
);

if ( $resource instanceof modResource && array_key_exists($resource->get('template'), $templates_enable) ) {
    $script .= 'if (MODx.ux.Ace.replaceTextAreas) {';
    foreach ($templates_enable[$resource->get('template')] as $tv) {
        $script .= 'MODx.ux.Ace.replaceTextAreas(Ext.query("textarea#' . $tv . '"));';
    }
    $script .= '}';
}
$modx->regClientStartupHTMLBlock('<script>Ext.onReady(function(){' . $script . '})</script>');
id шаблонов и тв-параметров находятся в скобках в дереве элементов.

Короткий вариант для всех блоков «Текстовая область»:
$resource = ($resource instanceof modResource) 
            ? 
            $modx->getObject('modResource',$resource->get('id')) 
            : $modx->getObject('modResource',(int)$resource);
if ( $resource instanceof modResource ) {
	$modx->regClientStartupHTMLBlock('
		<script>Ext.onReady(function(){
			if (MODx.ux.Ace.replaceTextAreas) {
				MODx.ux.Ace.replaceTextAreas(Ext.query(".x-form-textarea"));
			}
	');
}