Ivan Shvindin

Ivan Shvindin

С нами с 25 апреля 2013; Место в рейтинге пользователей: #147
Сергей Шлоков
23 апреля 2016, 11:10
5
+3
Я для себя сделал такой плагин. Сильно не заморачивался. Просто скопировал код из Ace.
<?php
switch ($modx->event->name) {
    case 'OnDocFormPrerender':
        if (!$modx->controller->resourceArray) {
            return;
        }
        $field = 'modx-resource-introtext';
        $mimeType = $modx->getObject('modContentType', $modx->controller->resourceArray['content_type'])->get('mime_type');
        if ($mimeType == 'text/html' && $modx->getOption('pdotools_fenom_parser')) {
            $mimeType = 'text/x-smarty';
        }
		$modxTags = 1;
		$script = "MODx.ux.Ace.replaceComponent('$field', '$mimeType', $modxTags);";
		$script .= "MODx.ux.Ace.replaceTextAreas(Ext.query('.modx-richtext'));";
		$modx->controller->addHtml('<script>Ext.onReady(function() {' . $script . '});</script>');
        break;
    default:
        return;
}
Василий Наумкин
19 ноября 2015, 10:23
10
+7
My quick example:
<?php
$tplWrapper = '@INLINE <ul>{{+output}}</ul>';
$tplYear = '@INLINE <li>{{+year}}<sup>({{+count}})</sup><ul>{{+resources}}</ul></li>';
$tplMonth = '@INLINE <li>{{+month}}<sup>({{+count}})</sup><ul>{{+resources}}</ul></li>';
$tpl = '@INLINE <li><a href="{{+uri}}">{{+pagetitle}}</a></li>';

$pdo = $modx->getService('pdoFetch');

$resources = $pdo->getCollection(
	'modResource',
	array('published' => true, 'deleted' => false),
	array('parents' => 0, 'sortby' => 'createdon', 'sortdir' => 'DESC')
);
$tree = array();
foreach ($resources as $resource) {
	$year = date('Y', $resource['createdon']);
	$month = date('m', $resource['createdon']);
	$tree[$year][$month][] = $resource;
}

$output = '';
foreach ($tree as $year => $months) {
	$tmp1 = '';
	$count = 0;
	foreach ($months as $month => $resources) {
		$tmp2 = '';
		foreach ($resources as $resource) {
			$tmp2 .= $pdo->getChunk($tpl, $resource);
			$count++;
		}
		$tmp1 .=  $pdo->getChunk($tplMonth, array(
			'month' => $month,
			'count' => count($resources),
			'resources' => $tmp2,
		));
	}
	$output .=  $pdo->getChunk($tplYear, array(
		'year' => $year,
		'count' => $count,
		'resources' => $tmp1,
	));
}

return $pdo->getChunk($tplWrapper, array('output' => $output));

Result:
Павел Гвоздь
15 ноября 2015, 20:41
1
0
Удалось решить, вытащив метод .push() из метода .on(). То бишь вот код, который добавляет табу:
Ext.ComponentMgr.onAvailable('minishop2-window-order-update', function()
{
	msComponent.order_id = this.record.id || 0;
	msComponent.ms2tab_order = {
		autoHeight: true,
		autoWidth: true,
		bodyCssClass: "tab-panel-wrapper",
		border: true,
		hideMode: "offsets",
		order_id: msComponent.order_id,
		title: _('mscomponent_tab_title'),
		xtype: "mscomponent-order-grid",
	};
	
	this.fields.items.push(msComponent.ms2tab_order);
});

Не знаю, насколько это правильно. Надеюсь знающие расскажут.
Павел Гвоздь
12 ноября 2015, 09:10
1
+4
Есть у меня плагин для подмены мыл менеджеров в зависимости от города. Может чем-то поможет:

<?php
if( $modx->event->name == 'msOnCreateOrder' )
{
	$address = $msOrder->getOne('Address');
	$city = $address->city;
	
	$emails = array(
		'Москва' => array(
			'***@mail.ru',
			'***@mail.ru',
		),
		'Санкт-Петербург' => array(
			'***@mail.ru',
		),
	);
	
	if( !empty($emails[ $city ]) )
	{
		$manager_emails = implode( ',', $emails[ $city ] );
	}
	
	$modx->setOption('ms2_email_manager', $manager_emails);
}
Сергей Шлоков
22 октября 2015, 13:29
1
+3
Спасибо за добрый слова!
Я вот вроде обращался к людям, программирующим в админке, а пишут в основном те, кто работает в IDE. Странно, никто не читает заголовок что-ли. Я тоже работаю в IDE. Интересные вещи сохраняю в Evernote. Мне эта доработка не нужна, поэтому и хотел узнать, может пригодится кому-нибудь. На данный момент интерес проявили 5 человек. Значит практически все работают редакторах. Поэтому вопрос о разработке закрываю.
П.С. Утром забацал вкладку Избранное. База разработки стала очень большая. Надоело лазить по этому дубу. А тут накидал текущие рабочие элементы в Избранное и работаешь.
Павел Романов
02 сентября 2015, 09:53
1
+1
Добавьте в HEAD метатеги:
<meta property="og:image" content="путь к нужной картинке" />
<link rel="image_src" href="путь к нужной картинке" />
Кстати, og:image у Вас есть (11 строка), но он пустой.
Deleted
14 августа 2015, 23:42
1
0
Почти, у меня что на MODX, что на Django проекты выглядят идентично.
Из /assets/ ничего не погружается — все медиа и статика на cdn.
В админку адрес по каждые сутки обновляется (клиенты входят через расширение для Chrome).
Весь JS компонентов переписан на VanillaJS.
Что в HTML, что в заголовках сервера никаких упоминаний о CMS и языке программирования.

Пока никто определить не смог что там под капотом.
Павел Романов
19 мая 2015, 17:47
7
+3
На одном форуме народ соревновался в самом «компактном» решении этой задачи ))
Победило такое решение:
<?php
if($n!=''){
return= $n%10==1&&$n%100!=11?$w1:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$w2:$w3);
}
Ну и вызываем:
[[Snippet? &n=`123` &w1=`год` &w2=`года` &w3=`лет` ]]
Владислав
15 мая 2015, 13:26
1
+3
Если интересно кому будет решение.

Скопировал два метода, как по инструкции. Первый от buildBooleanFilter, а второй от filterNumber и назвал их чтобы фильтр срабатывал на Exist. Собрался копать дальше и о чудо… все заработало.

public function buildExistFilter(array $values, $name = '') {
    	if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
			return array();
		}

		$results = array();
		foreach ($values as $value => $ids) {
			$title = empty($value) ? $this->modx->lexicon('mse2_filter_boolean_no') : $this->modx->lexicon('mse2_filter_boolean_yes');
			$results[$title] = array(
				'title' => $title
				,'value' => $value
				,'type' => 'boolean'
				,'resources' => $ids
			);
		}

		ksort($results);
		return $results;
	}
    
    public function filterExist(array $requested, array $values, array $ids) {
    	$matched = array();

		$min = floor(min($requested));
		$max = ceil(max($requested));

		$tmp = array_flip($ids);
		foreach ($values as $number => $resources) {
			if ($number >= $min && $number <= $max) {
				foreach ($resources as $id) {
					if (isset($tmp[$id])) {
						$matched[] = $id;
					}
				}
			}
		}

		return $matched;
	}
&suggestionsRadion=`tv|space__image`
&tplFilter.row.tv|space__image=`tpl.mFilter2.filter.checkbox`

Копать дальше не пришлось
Ганин Роман
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.