Дмитрий

Дмитрий

С нами с 16 декабря 2015; Место в рейтинге пользователей: #47
Василий Наумкин
21 июля 2015, 12:42
4
+3
<?php
if ($modx->event->name != 'OnDocFormPrerender' || $resource instanceof Ticket || $resource instanceof TicketsSection) {
    return;
}

if ($Tickets = $modx->getService('Tickets')) {
    $modx->controller->addLexiconTopic('tickets:default');
    
    $Tickets->loadManagerFiles($modx->controller, array(
        'config' => true,
		'utils' => true,
		'css' => true,
		'comments' => true,
    ));
    
    $insert = '
		tabs.add({
			title: _("comments"),
			items: [{
				xtype: "tickets-panel-comments",
				hidden: false,
				record: ' . $modx->toJSON($resource->toArray()) . ',
				parents: ' . $resource->id . ',
			}]
		});
	';
	if ($modx->getCount('modPlugin', array('name' => 'AjaxManager', 'disabled' => false))) {
		$modx->controller->addHtml('
		<script type="text/javascript">
			Ext.onReady(function() {
				window.setTimeout(function() {
					var tabs = Ext.getCmp("modx-resource-tabs");
					if (tabs) {
						' . $insert . '
					}
				}, 10);
			});
		</script>', true);
	}
	else {
		$modx->controller->addHtml('
		<script type="text/javascript">
			Ext.ComponentMgr.onAvailable("modx-resource-tabs", function() {
				var tabs = this;
				tabs.on("beforerender", function() {
					' . $insert . '
				});
			});
		</script>', true);
	}
}
Может и включу потом, да. Но пока это твой эксклюзив =)
Ганин Роман
24 апреля 2015, 22:57
11
+2
Начало разработки — за пределами MODX. Вёрстка (БЭМ) шаблонов, чанков и страниц в Sublime Text 3 с использованием Gulp-задач для автокомпиляции с использованием пре- и постпроцессоров (ускоряют разработку в 4-5 раз), зависимости: bower, для UI-тестов адаптивности: BrowserSync. Минификация стилей и скриптов на клиенте (прекратите вешать эту задачу на MinifyX/сервер!). Кодстайл: CSScomb и JSCS + JSLint. В дальнейшем можно настроить автоматическую выгрузку по SFTP скомпилированных файлов прямо на сервер. Шаблонизация на клиенте легко настраивается с помощью gulp-rigger, gulp-file-include или gulp-include-source. За счет вотчеров скорость просто реактивная. Особенно удобно, если монитора два и больше — в одном мониторе код проекта, в остальных — мгновенный результат (страница обновляется быстрее, чем я успеваю перевести взгляд с одного монитора на другой или переключиться на новый раб. стол).
Инициализация сервера: ansible, установка MODX: Gitify, импорт настроек: Teleport. Импорт уже подготовленных чанков, tpl-ек занимает минуты, нет необходимости заниматься «клавадрочерством» с Ctrl+Tab (переключиться на фронтенд-вкладку), Ctrl/Cmd+R (обновить страницу), чтобы просмотреть результат — всё уже оттестированно на этапе вёрстки. Остаётся только настроить магию сниппетов и оформить Custom Forms. Дальше — оверлокинг с XDebug, debugParser, BloodLine и Chrome DevTools.
Василий Наумкин
08 сентября 2013, 19:03
1
0
Как будет время — постараюсь добавить это в дефолтный функционал.

А пока держи готовое решение плагином:
switch ($modx->event->name) {

case 'OnBeforeUserFormSave':
if ($mode != 'upd') {return;}
$profile = $user->getOne('Profile');

if (!empty($_FILES['newphoto']) && preg_match('/image/', $_FILES['newphoto']['type']) && $_FILES['newphoto']['error'] == 0) {
	$path = 'images/users/';
	$file = $path . md5($modx->user->id . time()).'.jpg';
	$url = MODX_ASSETS_URL . $file;
	$dst = MODX_ASSETS_PATH . $file;
	
	$tmp = explode('/', $profile->get('photo'));
	$cur = MODX_ASSETS_PATH . $path . end($tmp);
	$params = array(
		'w' => 200		// Ширина
		,'h' => 200		// Высота
		,'bg' => 'ffffff'	// Фон
		,'q' => 95		// Качество в %
		,'zc' => 0		// Обрезка, TL - это Top Left, есть еще C - center, BR - Bootom Right  и т.д.
		,'f' => 'jpg'		// Формат изображения
	);
	
	if (empty($_FILES['newphoto']['tmp_name'])) {return;}
	elseif ($profile->get('photo') && empty($_REQUEST['photo'])) {
		if (file_exists($cur)) {unlink($cur);}
		$profile->set('photo', '');
		return;
	}
	else {
		move_uploaded_file($_FILES['newphoto']['tmp_name'], $dst);
		$phpThumb = $modx->getService('modphpthumb','modPhpThumb', MODX_CORE_PATH . 'model/phpthumb/', array());
		$phpThumb->setSourceFilename($dst);
		foreach ($params as $k => $v) {
			$phpThumb->setParameter($k, $v);
		}
		if ($phpThumb->GenerateThumbnail()) {
			if (!$phpThumb->renderToFile($dst)) {
				$modx->log(modX::LOG_LEVEL_ERROR, 'Could not save rendered image to'.$dst);
			}
			if (file_exists($cur)) {unlink($cur);}
			$profile->set('photo', $url);
		}
		else {$modx->log(modX::LOG_LEVEL_ERROR, print_r($phpThumb->debugmessages, 1));}
	}
}
break;