Борис И

Борис И

Был в сети 15 января 2023, 17:28
Заказы не принимаю
Василий Наумкин
Василий Наумкин
Я бы написал плагин на событие сохранения комментария:
if ($modx->event->name == 'OnBeforeCommentSave') {
	if (stripos($_POST['text'], 'b-nosov.blogspot') !== false) {
		$modx->event->output('Хватит спамить!');
	}
}
Email очень просто изменить, поэтому лучше проверять текст комментария на спамерскую ссылку.
Максим Кузнецов
Максим Кузнецов
Написать свой сниппет, который будет записывать данные в сессию и исходя из этого формировать результат для сниппета. Допустим:

В чанке (баннера) вызываем сниппет, который будет записывать в сессию idx баннера:
[[!getBannerPosition? &mode=`write` &idx=`[[+idx]]`]]
<?php
	if ($mode == 'write') {
		$_SESSION['lastviewed'] = $idx;
	}
	else {
		$offset = $_SESSION['lastviewed'];
		if (empty($offset)) {
			return '0';
		}
		else {
			return $offset;
		}
	}

А в вызове BannerY допишем параметр &offset=`[[!getBannerPosition]]`, чтобы отображать еще не просмотренный баннер.

Можно также расширить сниппет, чтобы при $_SESSION['lastviewed'] == [[+banner.total]] — сбрасывать значение сессии, но, думаю, с этим уже проблем не возникнет.
Алексей
Алексей
У меня подобная ситуация случилась при установке пакета tagManager. Его деинсталляция с последующим удалением не привело к результату. Замена содержимого файла:
/core/model/modx/processors/element/tv/renders/mgr/input/text.class.php
помогло.
Спасибо.
SaLacoste
SaLacoste
Страница index.php статична (ее урл имею ввиду), то ее легко можно закрыть правилом редиректа.

Про sendRedirect прочитал в документации, без доп. параметров он ставит 302 редирект, что не есть хорошо в нашей ситуации.
Но 301 редирект предложенный Вами не отрабатывал у меня, поэтому я написал полную запись

<?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), 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently');
		}
	}
Так все работает.

И если уже мы заговорили про canonical, то этот тег не гарантирует поведение ПС в выдаче, может и с тегом выйти в выдачу.
Эта проблема актуальна для страниц пагинации, например. Так как по умолчанию ставится только canonical на вторых и следующих страницах. (Я на этот счет даже писал Василию), корректно отрабатывать пагинацию через noindex, follow.

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

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

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