Владимир

Владимир

Был в сети 30 апреля 2025, 08:19
Заказы не принимаю
Василий Наумкин
Василий Наумкин
Василий Наумкин
Василий Наумкин
Не нужно использовать сниппеты типа IF, гораздо лучше написать свой сниппет-обёртку, например MyMenu:
<?php
if ($modx->resource->id == 8) {
	$scriptProperties['parents'] = 8;
}

return $modx->runSnippet('pdoMenu', $scriptProperties);

И вызывать как
[[!MyMenu?
	&level=`3`
	&parents=`0`
	&resources=`0`
	&rowClass=`tab`
]]
На странице с id == 8 параметр &parents будет заменён.
Василий Наумкин
Василий Наумкин
У меня на сайте, например, бывают платные разделы. Чтобы добавить пользователю доступ в них при оплате, работает вот такой плагин:
case 'OnWebPageInit':
if ($uid = $modx->user->id) {
	if ($extended = $modx->user->Profile->get('extended')) {
		if (!empty($extended['updateGroups'])) {
			unset($_SESSION['modx.user.'.$modx->user->id.'.userGroupNames']);
			$extended['updateGroups'] = 0;
			$modx->user->Profile->set('extended', $extended);
			$modx->user->Profile->save();
			
			$ctxQuery = $modx->newQuery('modContext');
			$ctxQuery->select($modx->getSelectColumns('modContext', '', '', array('key')));
			if ($ctxQuery->prepare() && $ctxQuery->stmt->execute()) {
				if ($contexts = $ctxQuery->stmt->fetchAll(PDO::FETCH_COLUMN)) {
					$serialized = serialize($contexts);
					$modx->exec("UPDATE {$modx->getTableName('modUser')} SET {$modx->escape('session_stale')} = {$modx->quote($serialized)}");
				}
			}
		}
	}
}
break;
Написан давно, работает без нареканий.

Для разлогинивания заблокированных пользователей использую вот такой код в том же плагине:
if ($modx->user->id) {
	if (!$modx->user->active || $modx->user->Profile->blocked) {
		$modx->runProcessor('security/logout');
		$modx->sendRedirect('/');
	}
}

Если это всё не то — прошу прощения.
Василий Наумкин
Василий Наумкин
Да, можно делать отдельным сниппетом:
<?php
$pdo = $modx->getService('pdoTools');
if (!$isset($placeholders)) {
	$placeholders = array();
}

return $pdo->getChunk($tpl, $placeholders);

Можно вообще не использовать Fenom в контенте страницы и шаблонах, а только в чанках — это самый простой и беспроблемный способ работы. Именно он по умолчанию и включен.
Андрей
Андрей
А подскажите, как прописать ссылку для сгенерированного увеличенного изображения? пишу так:
<a rel="fancybox" href="[[+1200x800:default=`/assets/components/minishop2/img/web/ms2_big.png`]]" target="_blank">
		<img src="[[+360x270:default=`/assets/components/minishop2/img/web/ms2_medium.png`]]" width="360" height="270" alt="" title="" id="mainImage" />
	</a>
Но, увы, ничего не выходит. Ссылка ведет на основное фото. В связи с этим все наложения водяных знаков не особо существенны, ведь по клику доступна фотка без водяного знака.