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

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

Был в сети 04 августа 2021, 21:51
Заказы принимаю
Возможно, дело в том, что скрипт яндекса подгружает контент асинхронно и его попросту нет в зоне видимости цепляющей функции.

Не скажу точно, как это переписывается с чистого javascript'a, но в jquery это можно сопоставить примерно с этим:

$("идентификатор").click(function(){
	//не будет срабатывать на удовлетворяющий идентификатор, подгруженный через аякс
});

$(document).on('click', 'идентификатор', function(e) {
	//тут все ок
});
Только что проверил — на дефолтной сборке сниппет отрабатывает корректно:
— создаем страницу (sitemap.xml) с типом содержимого «xml»
— вызываем сниппет [[!pdoSitemap]]

Может, у вас стоят какие-то плагины, перекрывающие результат/есть что-нибудь в логах?
Можно попробовать на событие OnPageNotFound проверять контекст или адрес запроса. Если запрос не в основном контексте -> $modx->switchContext('web') и дальше ничего не делаем, чтобы юзер получил 404.

Не проверял, но должно сработать.

Просто у мя ссылки на стили на странице 404 стоят относительные (вернее генерируются они такими с помощью MinifyX)
Тег base не помогает решить проблему?
Не работал с modDevTools, поэтому не уверен, найдет ли он чанк, допустим, в сниппете с захардкореным вызовом getChunk.

В случае чего, у вас ведь всегда есть поиск напрямую по бд — если совпадений по названию чанка больше 1го — он потенциально где-то используется. Так хоть и поштучно, но можно почти безошибочно отсеять неиспользуемые чанки.
Jevxix'ом — не уверен.

Можно попробовать создать плагин на OnBeforeCommentSave, OnBeforeDocFormSave и тд, который будет разбирать требуемые поля и искать в них внешние ссылки (думаю, примеров для решения такой задачи в интернете хватает). И менять при нахождении на требуемый url.
Сортировка + поиск: mSearch2
Проверка полей на уникальность: плагин на событие OnDocFormSave
Добавить информацию: если в профиль (+ регистрация/авторизация), то office/login, если как ресурс сайта (страница), то tickets
Доступ к тем или иным страницам: системная настройка прав для групп пользователей/свой сниппет/PayAndSee
Общие выводы разделов/списков ресурсов: pdoTools/tickets
Пользователь в сниппете Login должен создаваться (но не активироваться) уже на шаге отправки письма.

Проблема может быть с правами на просмотр страницу (в вашем случае — личный кабинет). Возможно, еще неавторизованный пользователь переходит на страницу, не проходит по уровню доступа и сниппет активации просто не успевает отработать.

Попробуйте создать отдельную страницу для активации, которая, в случае успеха, будет перекидывать на личный кабинет.
По поводу манагера и гет-параметров, проблему можно решить так:
<?php
	if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') {
		return;
	}
	
	if ($_SERVER['REQUEST_URI'] != '/') {
		$uri = strtok(substr($_SERVER['REQUEST_URI'], 1), '?');
		
		if ($uri == 'index.php') {
			$uri = intval(str_replace('/index.php?id=', '', $_SERVER['REQUEST_URI']));
			//не уверен, нужна ли здесь проверка на наличие ресурса, т.к. в случае отсутствия оного, событие должно перехватить OnPageNotFound
			
			if(empty($uri)) {
				$url = 1;
			}

			$modx->sendRedirect($modx->makeUrl($uri));
		}
	}
Если хотите массово и удобно для менеджеров — есть дополнение ClientConfig.

Устанавливаете — создаете нужную системную настройку (отключить комментарии на всем сайте) и в примере выше заместо проверки tv-поля проверяете свежесозданную настройку вида [[++ключ_настройки]].
По первому пункту: добавьте tv-поле (например Ticket.Comments.Disallow — Отключить комментарии) к шаблону тикетов, тип — чекбокс, с возможным вариантом «да==1».

В самом шаблоне тикетов вывести конструкцию:

[[*Ticket.Comments.Disallow:is=`1`:then=`
	<div class="ticket-comments alert alert-warning">Комментарии отключены.</div>
`:else=`
	[[!TicketComments]]
`]]