Alexey Medvedev

Alexey Medvedev

Был в сети 10 августа 2021, 17:41
Заказы не принимаю
yadi.sk/d/21zsiED_3MDcdi — тут транспортный пакет.
Обновиться просто. Откройте Установщик в админке, найдите пакет tinycompressor, нажмите удалить, принудительное удаление, загрузите новый пакет и установите.
К сожаление, не успел написать логику на обновление.

UPD: отправил на почту транспортный пакет.
Обновил компонент для работы с minishop2 галереей. Уточню у Василия почему он использует 'createObject', вместо 'uploadObjectsToContainer'. Event-плагин при загрузке файла в галерее minishop нужно вешать на событие 'OnFileManagerFileCreate'
Всё было бы отлично, если бы Вы использовали свой сервер, который можете настроить под себя — тогда и использование многих компонентов не требовалось. К тому же сжатие pngquant в php делается через shell_exec. Да и пихать в неё неизвестный файл (загружаемый пользователем) через shell — это как «кинуть булыжник в стекло» в плане безопасности, где стекло это защита сервера. Всё равно, спасибо за Ваш комментарий, я для себя поставил заметку, что можно использовать дополнительные классы для компрессии изображения на выбор пользователя в зависимости от настроек сервера.
Не за что. Короткий вариант (не закончил 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>
	');
}
Знаю, что прошло три года, но может кому пригодится. Это кусок моего плагина. (там ещё 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"));
			}
	');
}