Максим Кузнецов

Максим Кузнецов

С нами с 01 июля 2013; Место в рейтинге пользователей: #27
Максим Кузнецов
14 ноября 2017, 05:36
0
Скорее всего, для select-a прописаны похожие параметры:
select {
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
}
select::-ms-expand {
	display: none;
}
Максим Кузнецов
07 ноября 2017, 13:37
0
*пожал плечами* Для больших объемов или многократно повторяющихся вызовов — пожалуй.

В данном случае «похожие товары», скорее всего, будут выводиться только на странице самого товара.
Плюс, с fenom-ом кол-во запросов к бд сокращается минимум на 1..)

К слову, по поводу разделения: логику разбивания и выборки случайного слова из заголовка можно вынести в модификатор.
Максим Кузнецов
07 ноября 2017, 12:29
5
+6
На fenom-е посимпатичнее будет:

{foreach $_modx->resource.pagetitle | split : ' ' as $pagetitle_word}
	{if $pagetitle_word | length > 3}
		{var $words[] = $pagetitle_word}
	{/if}
{/foreach}

{set $random_word_position = rand(1, $words| length)}
{set $random_word = $words[$random_word_position - 1]}

{$_modx->runSnippet('!msProducts', [
	'parent' => $_modx->resource.parent,
	'resources' => -$_modx->resource.id,
	'where' => '{
		"pagetitle:LIKE": "%' ~ $random_word ~ '%"
	}',
	...
])}
Максим Кузнецов
12 октября 2017, 15:10
0
После ticket->save():
$ticket->get('id');

Далее getObject по полученному id.

Ну или сделать отдельный запрос getObject с where по uri или любому другому уникальному идентификатору.
Максим Кузнецов
12 октября 2017, 12:57
0
Для того, чтобы создать ресурс + тв необходимо или сделать это через процессор, или после создания способом выше, отдельно получить свежесозданный ресурс и записать в него tv.
Максим Кузнецов
10 октября 2017, 13:59
0
*пожал плечами* В данной задаче нельзя выиграть во всем сразу — весь вопрос в том, что для вас в приоритете:

— если вам критично сохранить исходную логику подсчета просмотров (которая, как уже ответил выше Сергей, скорее визиты), то можно записывать результат в отдельное поле по крону и выводить его значение, или же кэшировать сниппет. Но это не спасет от разбухания базы

— если критично уменьшить размер БД, то можно попробовать создавать для каждого тикета лишь по 1 записи, в которой будут перечислены id всех пользователей, которые просмотрели тикет. Но в таком случае отпадут гостевые просмотры.

— если нет возможности менять связанные дополнения, то остается или отключить просмотры для гостей, или повышать характеристики сервера
Максим Кузнецов
09 октября 2017, 21:49
+4
Проходится регулярно кроном по всем страницам сайта изаписывать их просмотры в тв или расширенное поле таблицы контента. Но это хоть и ускорит работу сайта, но не решит проблему разбухания базы...

Как вариант — по крону пробегаться по tickets_views, считая count на данный момент и, перенеся полученный результат в отдельное поле, очищать таблицу. При последующих срабатываниях — приплюсовывать результат.
Максим Кузнецов
09 октября 2017, 18:56
+1
Да, к слову по вышестоящему коду — на случай, если у вас на сайте подразумевается возможность повторной активации (активация-деактивация-активация), нужно сделать дополнительную проверку на существование ресурса.
Максим Кузнецов
09 октября 2017, 18:54
+1
if ($user->isMember('Managers')) {
	$parent = 1;
}
elseif ($user->isMember('Users')) {
	$parent = 2;
}
Максим Кузнецов
07 октября 2017, 10:00
0
Если у вас $_modx->resource.properties уже выводит array, зачем делать json_decode?
Максим Кузнецов
04 октября 2017, 03:31
+2
Примерно так:

<?php
	if ($modx->event->name == 'OnUserActivate') {
		if ($user) {
			if ($profile = $user->getOne('Profile')) {
				$user_id = $user->get('id');
				$fullname = $profile->get('fullname');

				$parent = 'айди_раздела_с_тикетами';
				$template = 'шаблон';
				
				if (isset($parent)) {
					/* Формируем uri по айди автора */
					$parent_alias = $modx->getObject('modDocument', $parent)->get('alias');
					$parent_alias .= '/' . $user_id;
					
					$ticket = $modx->newObject('modDocument');
					
					$ticket->set('parent', $parent);
					$ticket->set('template', $template);
					$ticket->set('class_key', 'Ticket');
					$ticket->set('show_in_tree', 0);
					$ticket->set('published', 1);
					$ticket->set('author', $user_id);
					$ticket->set('createdby', $user_id);
					$ticket->set('pagetitle', $fullname);
					$ticket->set('uri_override', 1);
					$ticket->set('uri', $parent_alias);
					$ticket->set('alias', $user_id);

					$ticket->save();
				}
			}
		}
	}
Максим Кузнецов
20 сентября 2017, 10:06
+2
Вариант 1: переназначить требуемую функцию функцию (в вашем случае функцию mSearch2.loadJQUI), примерно так:

$(document).ready(function() {
	mSearch2.loadJQUI = function (callback, parameters) {
		return;

		/*
		Или так, если необходимо отключить только подключение css-файлов.

		return $.getScript(mse2Config.jsUrl + 'lib/jquery-ui.min.js', function () {
			if (typeof callback == 'function') {
				callback(parameters);
			}
		});
		*/
	}
});
— данный код необходимо вызывать после оригинанала.

Вариант 2: скопировать msearch2/js/web/default.js в произвольный файл, удалив в нем не желаемый элемент и в системных настройках указать путь до нового файла.

Минус второго решения в том, что при обновлении пакета, в котором изменился исходный файл default.js, изменения для вас не применятся.

Вариант 3: объявить !important для стилей. %)
Максим Кузнецов
10 сентября 2017, 18:46
0
Предложенные выше способы (обернуть плейсхолдер результатов в условие) не будут нормально работать динамически, до перезагрузки страницы со сформированным гет-параметром.

Можете попробовать сделать сниппет-обертку для вызываемого в mFilter2 сниппета, который будет проверять наличие гет-параметров. В случае нахождения гет-параметра — передавать все scriptProperties в вызываемый сниппет, в противном случае возвращать пустоту.

Другой способ — расширить родной класс фильтрации, сформировав в нем нужные условия.
Максим Кузнецов
07 сентября 2017, 00:24
0
Интересно. Контакты в профиле.
Максим Кузнецов
06 сентября 2017, 23:29
0
За такие примеры MODX Revo, в свое время, и называли «тормознутным»: с таким вызовом выполнятся оба сниппета, вне зависимости от значения тв.
Максим Кузнецов
04 сентября 2017, 13:44
0
Если MIGX поддерживает загрузку сторонних видов тв (не проверял), то можно подгрузить внешнее тв через inputTV:
{"field":"image", "caption":"Изображение", "inputTV":"tv_image_real_name"}

А в самом тв-поле указать нужный источник файлов.
Максим Кузнецов
04 сентября 2017, 00:05
+1
У migx-поля с изображением есть параметр sourceFrom:
{"field":"image","caption":"Изображение пузыря","inputTVtype":"image","sourceFrom":"migx"}

— далее указываете нужный источник файлов для migx-тв-поля и тв-поля с изображением.