Василий Наумкин

Василий Наумкин

Был в сети 10 июня 2026, 17:44
Заказы не принимаю
Вот тебе сниппет getTodayIds, который присоединяет таблицу с ТВ и выбирает по ней подходящие id.
Нужно указать id ТВ с датой
<?php
$tvid = 1; // id ТВ с датой
$date = date('Y-m-d'); // Сегодня

$q = $modx->newQuery('modResource');
$q->leftJoin('modTemplateVarResource', 'TV', 'modResource.id = TV.contentid AND TV.tmplvarid = '.$tvid);
$q->select('modResource.id');
$q->where('DATE(TV.value) = "'.$date.'"');

if ($q->prepare() && $q->stmt->execute()) {
	$ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
	return implode(',', $ids);
}

Вызываем в getPage:
[[!getPage?
	&element=`getResources`
	&resources=`[[!getTodayIds]]`
]]
В основном конфиге задаётся зона, дальше эту ограничивающую зону можно применять к любой location любого сайта.Каждому сайту можно подкрутить параметр burst.

Если нужно ограничить частоту запросов не 1 в сек, а, например, 2 — то задавай вторую зону и там прописывай это ограничение.
limit_req_zone  $binary_remote_addr  zone=two:10m   rate=2r/s;

А потом применяй вторую зону какому-нибудь сайту:
location / {
	limit_req zone=two burst=5;
}

service nginx restart/reload работает без проблем. На домашнем сервере была такая проблема с php5-fpm, решил полным удалением и установкой заново.