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

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

С нами с 08 декабря 2012; Место в рейтинге пользователей: #1
11 декабря 2015, 22:45
+2
Возможно, учитывая, что сниппет mSearch2 может возвращать список id для вывода результатов любым другим сниппетом.

Ну и автопоиск через mSearchForm сразу так работает — перекидывает на найденное при клике в режиме «results».
11 декабря 2015, 16:32
+2
Наверное, стоит добавить ссылку на истоки этой гирлянды.
11 декабря 2015, 08:32
0
Я хотел добавить подобный функционал в AdminPanel, но до сих пор руки не дошли.

Да и непонятно уже, дойдут ли когда-нибудь. Но функционал интересный, многие просят.
11 декабря 2015, 06:52
+1
На здоровье!

Не забудь отписать потом, как ищет у тебя на сайте.
10 декабря 2015, 14:03
+4
Зачем называть дополнение 2 буквами?

Чтобы потом как можно сложнее было гуглить ответы на вопросы по нему? Почему не назвать пакет GeoLocation или даже sxGEO? Например, это топик уже нельзя найти по запросу gl.

Сразу представляется диалог:
— Установи gl!
— Чего?
— Ну, gl, то есть GeoLocation
— А чего бы сразу так и не сказать?

Как скоро мы придём к пакету XX такими темпами?
10 декабря 2015, 10:07
+2
Такая возможность есть (событие onLoadManagerPage или как-то так), но чудо сотворить вряд ли получится, потому что ExtJS 3.4 не очень-то рассчитан на адаптивную вёрстку.

Да и вообще, вся админка не рассчитана.
10 декабря 2015, 09:45
+1
Там всё очень сложно.

Меня пока хватило вот на это решение.
10 декабря 2015, 09:43
0
Ничем, просто так привык, когда только учился.

Сейчас стараюсь писать попроще, но еще много подобного можно найти в разных разработках.
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('/');
	}
}

Если это всё не то — прошу прощения.
09 декабря 2015, 21:57
+2
А стоит ли им прям сессии-то удалять? А вдруг там товары какие хранятся в корзине?

Я обычно просто ставлю юзеру флажок в extended, который проверяется плагином на загрузку страницы. Как только зашел юзер с этим флажком — сессия ему аккуратно обновляется и флажок удаляется. Никто не страдает.
09 декабря 2015, 21:10
0
Да всё он выводит, нужно просто разобраться, что и в каком виде хранится в БД, а не тупо копировать чанки от getResources.

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

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

Можно вообще не использовать Fenom в контенте страницы и шаблонах, а только в чанках — это самый простой и беспроблемный способ работы. Именно он по умолчанию и включен.
09 декабря 2015, 21:02
+1
А нафига в карте сайта Fenom-то? Да еще и на 50 000 документов. Тогда хоть кэширование скомпилированных чанков надо включать.

А вообще, там просто str_replace нужен, он по умолчанию и используется.
09 декабря 2015, 20:32
+1
bezumkin.ru/sections/components/1775/

Из-за лютых тормозов потом пришлось изменить логику работы этого параметра. Хотя, скорость волнует не всех разработчиков.
09 декабря 2015, 16:22
0
Это потому, что парсер pdoTools подлезает в самом конце, уже после сохранения кэша документа.

Если подлезать раньше, то начинаются другие проблемы, поэтому оставил пока так.
09 декабря 2015, 16:20
+1
Зашел на сайт, он на тестах показывает ошибку, что маловато памяти. Установил выборку 1 раз 1000 ресурсов, вызываю по очереди всё. Перед первым вызовом делаю полную очистку кэша.

Не Fenom
1 запуск — 0.2594 s
2 запуск — 0.0522 s

Fenom
1 запуск — 0.2845 s
2 запуcк — 0.0674 s

Разница в районе погрешности на простейших чанках и 1000 итераций. Если такой результат не устраивает, всегда можно вернуться к сниппету IF и фильтрам вывода.
09 декабря 2015, 09:08
0
Думаю, тут проблема в использовании tvFilters.

pdoTools работает с реальными данными в таблице, а значения по умолчанию от ТВ туда не пишутся.