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

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

Был в сети 04 августа 2021, 21:51
Заказы принимаю
Вам помогут встроенные модификаторы MODX'a.

Что-то вроде:
[[+название_тв_с_флажком:is=``:then=`первая верстка`:else=`вторая`]]
НО: это не самое лучшее решение с позиции итоговой скорости, поэтому лучше реализовать ту же логику при помощи идущего в комплекте с pdoTools шаблонизатора Fenom.
Ну, знание js явно не будет лишним..)

С другой стороны, если вы хотите высветить алерт из какой-то произвольной библиотеки, то инициализировать его внутри вышеописанного кода не составит проблем. Если же вы хотите высветить свою стилизацию/текст при помощи идущего в комплекте с AjaxForm
jGrowl, то его вызов тоже довольно легко воспринимается наитивно..)

Что же до удаления дефолтного алерта, то реализуется примерно так:
— копируем этот код в произвольный файл
— в вызове сниппета AjaxForm указываем при помощи настройки &frontend_js путь до свежесозданного файла
— в самом файле удаляем вот эту строку
(аналогичным способом можно также удалить другие типы алертов, избавляясь от строчек, начинающиеся с AjaxForm.Message)
Хороший вопрос..)

Если честно, не уверен, что проблемы с сессией связаны именно с вышеописанным случаем (проверил в связке ms2Gallery + ckeditor — ошибка не воспроизвелась), но могу предложить вставлять прямую ссылку на картинку, а не плейсхолдер:

закладка «галерея» -> выбираете нужное изображение (кликаете) -> нажимаете на превьюшку -> копируете адрес открывшегося окна

Ну и глянуть лог ошибок/консоль при воспроизведении ошибки — может что покажет.
pdoPage — обертка результатов (которая получает набор «ресурсов» или других данных и оборачивает их в пагинацию).

Соответственно, в вызов pdoPage прописываются и параметры, относящиеся к пагинации, и параметры, относящиеся к сниппету, который возвращает результаты.
Потому что у сниппета (и кнопок первая/последняя страница) есть 2 состояния — когда кнопки активны и когда уже отображена первая или последняя страница (кнопки, соответственно, задизейблены).

Иначе говоря, вам нужны шаблоны tplPageFirstEmpty, tplPageFirst, tplPageLastEmpty и tplPageLast.

+ если вы хотите присвоить им «пустое» значение, то необходимо прописывать это через @INLINE (т.е. в обход чанкам).

Пример:
&tplPageFirst=`@INLINE` //вернет "пустой" шаблон
=> проверка не проходит по условию
$classes == 'class="level3"'

— нужен не level3, а level2.

+ в случай, если у вас в контейнере будет 3 или менее ресурса — последний пункт не будет проходить т.к. у него в классах будет висеть «last».
1. Создаете пхп-файл, который будем запускать по крону (допустим, раз в сутки).
2. Предположим, у вас есть 2 раздела — «Список событий за текущий день» (id 1) и «Архив» (id 2). Тогда содержимое созданного php-файла будет примерно следующим:

<?php
	//подключаем функционал MODX'a
	define('MODX_API_MODE', true);

	require '/путь_до/index.php';
	
	// Запускает службы MODX'a
	$modx->getService('error','error.modError');
	$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
	$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');

	//выбираем все документы из категории с id 1, у которых дата отмены публикации меньше текущей даты
	$pages = $modx->getCollection('modResource', array('parent' => 1, 'unpub_date:<' => time()));
	
	foreach ($pages as $page) {
		//выставляем айди новой категории
		$page->set('parent', 2);
		$page->save();
	}
	
	//чистим кэш
	$modx->cacheManager->refresh();
В pdoMenu, скорее всего, такой функционал не предусмотрен (т.к. возникает сложность с последовательностью нумерации результатов) — т.е. даже модификаторы от [[+idx]] тут особо не помогут.

Если вопрос с меню косметического плана — то можно решить задачу при помощи jquery.

В противном случае разве что вызывать при помощи pdoResources первый уровень меню, а внутри при помощи него же — второй (с выставленным &limit). Или попробовать расписать составной джоин потомков к первому вызову.

UPD: …или же вообще сверстать все руками, без запросов к бд. А активный пункт присваивать уже при помощи Jquery.
Кешируйте вызов pdoMenu, используйте полноценные чанки и перепишите их содержимое на fenom, пропишите &fastMode.

Вообще, тут скорость во многом упирается в глубину поиска и количество дочерних документов, а дальше по приоритету — хостинг и вложенные сниппеты/модификаторы.

Для сравнения, на своем сайте на modhost'e (минимальный тариф) некешируемый вызов двухуровнего меню (суммарно ~18 ресурсов) выполняется за 0.06 секунд (кешируемый за 0.01).
Как вариант, могу предложить следующее:

1) копируете
содержимое и создаете кастомный файл скриптов Tickets
(чтобы не затерлось при обновлении)
2) в системных настройках Tickets указываете путь до свежесозданного файла
3) после 194 строки прописываете закрытие модального окна.