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

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

С нами с 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 работает с реальными данными в таблице, а значения по умолчанию от ТВ туда не пишутся.