Владимир

Владимир

С нами с 28 декабря 2012; Место в рейтинге пользователей: #90
Василий Наумкин
15 декабря 2015, 11:52
1
+2
tplInner, как и tplOuter — это обёртка для блока меню. Там просто нет id, так же как нет и pagetitle и других данных ресурсов.

Если же там указать [[+id]], то туда попадёт левый id из-за рекурсивного парсера MODX. Так что, Fenom как раз работает правильно, не выводя то, чего нет.

Точно такой же вопрос в репозитории.
Василий Наумкин
14 декабря 2015, 12:01
2
+3
Не нужно использовать сниппеты типа 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 будет заменён.
Илья Уткин
10 декабря 2015, 19:27
1
0
В документации, видимо, ошибка. В коде не совсем так.

Попробуйте
{var $ts = date('Y-m-d H:i:s')." -1 day"}
{$ts|date:"%Y/%m/%d %H:%M:%s"}
Илья Уткин
10 декабря 2015, 11:39
1
+4
$chunk = $modx->getObject('modChunk', array('name' => 'tpl.row'));
return $chunk->get('static_file');
Василий Наумкин
10 декабря 2015, 07:26
8
+5
У меня на сайте, например, бывают платные разделы. Чтобы добавить пользователю доступ в них при оплате, работает вот такой плагин:
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('/');
	}
}

Если это всё не то — прошу прощения.
Stan Ezersky
09 декабря 2015, 23:49
2
+3
Огромный плюс!

Я лично против минификаторов на сайте.

Для лентяев — подборка ссылок:
Online Javascript Compression Tool
Online CSS Minifier/Compressor и JavaScript Minifier/Compressor
Online JavaScript/CSS Compressor

Все проверены
Василий Наумкин
09 декабря 2015, 21:10
1
+2
Да, можно делать отдельным сниппетом:
<?php
$pdo = $modx->getService('pdoTools');
if (!$isset($placeholders)) {
	$placeholders = array();
}

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

Можно вообще не использовать Fenom в контенте страницы и шаблонах, а только в чанках — это самый простой и беспроблемный способ работы. Именно он по умолчанию и включен.
Fi1osof
09 декабря 2015, 21:06
5
+3
Да, 50к — это явно перебор. Лучше делать сайтмап с постраничностью. Вот такое у меня норм работает, поисковики нормально на автомате кушают.
Андрей
08 декабря 2015, 16:45
1
0
А подскажите, как прописать ссылку для сгенерированного увеличенного изображения? пишу так:
<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>
Но, увы, ничего не выходит. Ссылка ведет на основное фото. В связи с этим все наложения водяных знаков не особо существенны, ведь по клику доступна фотка без водяного знака.
Илья Уткин
04 декабря 2015, 12:09
1
+2
&sortby=`{ "editedon":"DESC", "createdon":"DESC" }`