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

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

С нами с 08 декабря 2012; Место в рейтинге пользователей: #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 работает с реальными данными в таблице, а значения по умолчанию от ТВ туда не пишутся.
Василий Наумкин
09 декабря 2015, 04:10
+1
Проблема с картой сайта заключается в том, что она вызывается несколько раз и с разными параметрами, а сниппет по умолчанию включает кэш для хранения результатов.

Вот и выходило, что кэш от работы одного вызова затирал другой. Обновил pdoTools и исправил этот недостаток. Теперь всё должно работать нормально.
Василий Наумкин
06 декабря 2015, 23:41
+1
Там выше ссылку дали, где парни за видео 250 баксов требуют.

Даже если это 8 часов работы (полный день), то всё равно выходит не менее 2000 руб за час. Отсюда вывод, что видео стоит дороже, чем программирование.

Я на видеокассету в 2004 году снимал пионерский лагерь и нормально всё было.

Камеру ближе к докладчику, шабурчащим подзатыльник. Делов-то?

Рыдаю, спасибо! Всё же не стоит пренебрегать горячими закусками.