Ivan Shvindin

Ivan Shvindin

Был в сети 19 марта 2019, 17:05
Заказы принимаю
Сергей Шлоков
Сергей Шлоков
Я для себя сделал такой плагин. Сильно не заморачивался. Просто скопировал код из 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;
}
Василий Наумкин
Василий Наумкин
Павел Гвоздь
Павел Гвоздь
Удалось решить, вытащив метод .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);
});

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

<?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);
}
Сергей Шлоков
Сергей Шлоков
Deleted
Deleted
Почти, у меня что на MODX, что на Django проекты выглядят идентично.
Из /assets/ ничего не погружается — все медиа и статика на cdn.
В админку адрес по каждые сутки обновляется (клиенты входят через расширение для Chrome).
Весь JS компонентов переписан на VanillaJS.
Что в HTML, что в заголовках сервера никаких упоминаний о CMS и языке программирования.

Пока никто определить не смог что там под капотом.
Павел Романов
Павел Романов
На одном форуме народ соревновался в самом «компактном» решении этой задачи ))
Победило такое решение:
<?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=`лет` ]]
Владислав
Владислав
Если интересно кому будет решение.

Скопировал два метода, как по инструкции. Первый от 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`

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