[dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Все расширения, созданные нашим сообществом для phpBB, как находящиеся в разработке, так и прошедшие валидацию на официальном сайте phpbb.com, будут анонсированы тут. Вся техническая поддержка по этим расширениям оказывается в этом форуме.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Алг
Former team member
Сообщения: 878
Зарегистрирован: 31.07.2012 23:11
Откуда: Израиль
Благодарил (а): 84 раза
Поблагодарили: 279 раз

[dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение Алг » 06.11.2015 23:34

Расширение позволяет видеть на главной странице всех пользователей, посетивших конференцию в течение текущего дня и устанавливает рекордное количество посещений за два дня
Репозиторий https://github.com/alg5/wwhlight
Инсталляция стандартная

Отправлено спустя 12 минут 38 секунд:
Комментарий: отличия данного расширения от расширения [dev] NV Who Was Here - Побывавшие на форуме
Данное расширение не собирает статистику о каждом вошедшем пользователе и не сохраняет её
Расширение использует имеющуюся информацию о последней дате визита, хранящуюся в таблице phpbb_users.
Эта информация не актуальная( как в таблице сессий), но она обновляется кроном(от движка) каждый час
Кроме того, один раз в сутки срабатывает крон от расширения, вычисляя количесто пользователей, побывавших вчера и сегодня. Если это число окажется больше запомненного, то рекорд количества посещений и даты вчера-сегодня обновляются
Админских настроек у лайт-версии нет

Преимущества - низкая нагрузка на сервер, используется всего один легкий запрос на главной странице
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов

Аватара пользователя
igorbond
phpBB 3.0.7-PL1
Сообщения: 2477
Зарегистрирован: 09.01.2012 3:34
Благодарил (а): 574 раза
Поблагодарили: 114 раз

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение igorbond » 19.02.2016 23:17

Не боты не нужны. Ну тогда спасибо
Изображение

belov29
phpBB 1.2.0
Сообщения: 11
Зарегистрирован: 22.11.2015 12:15
Откуда: Анжеро судженск
Благодарил (а): 5 раз

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение belov29 » 26.03.2016 15:23

Алг, Спасибо за расширение, у меня почему то показывает пользователя что он был на форуме тогда, когда он разлогонится, а так если он не нажал кнопку выход но ушел с форума, не показывает что он был на форуме. Почему так выходит? форум у меня в подписи.

Аватара пользователя
Алг
Former team member
Сообщения: 878
Зарегистрирован: 31.07.2012 23:11
Откуда: Израиль
Благодарил (а): 84 раза
Поблагодарили: 279 раз

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение Алг » 26.03.2016 19:23

belov29, я думаю, что он у вас любого пользователя покажет, но покажет не сразу. В расширении есть пометка, что информация о пользователе обновляется один раз в час.
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов

belov29
phpBB 1.2.0
Сообщения: 11
Зарегистрирован: 22.11.2015 12:15
Откуда: Анжеро судженск
Благодарил (а): 5 раз

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение belov29 » 27.03.2016 4:30

Алг писал(а): В расширении есть пометка, что информация о пользователе обновляется один раз в час.
Это понятно, но у меня за целый день не обновляется, не то что за час!

belov29
phpBB 1.2.0
Сообщения: 11
Зарегистрирован: 22.11.2015 12:15
Откуда: Анжеро судженск
Благодарил (а): 5 раз

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение belov29 » 27.03.2016 13:20

Вот за целый день ноль пользователей стоит, хотя уже много пользователей заходило. Если разлогонится то покажет что был сразу. Алг, Помогите, пожалуйста, почему у меня такая ошибка!

Аватара пользователя
Алг
Former team member
Сообщения: 878
Зарегистрирован: 31.07.2012 23:11
Откуда: Израиль
Благодарил (а): 84 раза
Поблагодарили: 279 раз

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение Алг » 27.03.2016 21:06

belov29, ну давайте думать. Возможно, расширение конфликтует с каким-то другим.
1.Попробуйте для начала временно отключить все расширения очистить кеш и посмотреть, будут ли отражаться зарегенные пользователи.
2. Попробуйте нажать на ссылку "пользователи", отсортировать по полю "ЗАРЕГИСТРИРОВАН" в порядке убывания и проверить есть ли там залогиненные пользователи, заходившие более часа назад
3. Установите расширение Cron Status, проследите, что крон cron.task.core.tidy_sessions выполняется регулярно один раз в час и никто его не блокирует

потом будем смотреть по результатам
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов

Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2181
Зарегистрирован: 16.12.2007 14:01
Откуда: Павлодар
Благодарил (а): 7 раз
Поблагодарили: 338 раз

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение nissin » 15.10.2016 22:42

Как выяснилось, что запрос не сильно лёгкий, ну и желательно сделать кэширование.
OPEN config/services.yml
FIND

Код: Выделить всё

    alg.wwhlight.listener:
        class: alg\wwhlight\event\listener
        arguments:
            - @config
            - @template
            - @user
            - @dbal.conn
            - %core.root_path%
            - %core.php_ext%
            - @auth
ADD AFTER

Код: Выделить всё

            - @cache
OPEN event/listener.php
FIND

Код: Выделить всё

									, \phpbb\db\driver\driver_interface $db
									, $phpbb_root_path, $php_ext
									, \phpbb\auth\auth $auth
ADD AFTER

Код: Выделить всё

									, \phpbb\cache\service $cache
FIND

Код: Выделить всё

  		$this->counter_users_total = 0;
  		$this->counter_users_reg = 0;
  		$this->counter_users_hidden = 0;
ADD AFTER

Код: Выделить всё

		$this->cache = $cache;
FIND

Код: Выделить всё

	 public function index_modify_page_title()
	{
		  $this->user->add_lang_ext('alg/wwhlight', 'wwhlight');
		$username_full = '';
		  $users_list = '';

		$sql = "SELECT user_id, username, username_clean, user_colour, user_type, user_ip, user_lastvisit, user_allow_viewonline  " .
					" FROM  " . USERS_TABLE . 
						" WHERE user_type <>" . USER_IGNORE . 
						" AND DATE(FROM_UNIXTIME (user_lastvisit)) = CURDATE()" . 
						" ORDER BY user_lastvisit desc";
		$result = $this->db->sql_query($sql);
		while ($row = $this->db->sql_fetchrow($result))
		{
				$username_full = get_username_string(( 'full'), $row['user_id'], $row['username'], $row['user_colour']);
				$last_visit_time =  sprintf($this->user->lang['WWHLIGHT_LATEST'], $this->user->format_date($row['user_lastvisit'], 'H:i') );
				$hover_info = $last_visit_time ? ' title="' . $last_visit_time . '"' : '';
				if ($row['user_allow_viewonline'] )
				{
					$users_list .= $this->user->lang['COMMA_SEPARATOR'] . '<span' . $hover_info . '>' . $username_full . '</span>' ;
					$this->counter_users_reg++;
				}
				else
				{
					if ($this->auth->acl_get('u_viewonline'))
					{
						$users_list .= $this->user->lang['COMMA_SEPARATOR'] . '<em' . $hover_info . '>' .$username_full . '</em>' ;
					}
					$this->counter_users_hidden++;
				}
				$this->counter_users_total++;
		}

		$users_list = utf8_substr($users_list, utf8_strlen($this->user->lang['COMMA_SEPARATOR']));
		if ($users_list == '')
		{
			$users_list = $this->user->lang['NO_ONLINE_USERS'];
		}

		$this->template->assign_vars(array(
			'WWHLIGHT_LIST'		=> $this->user->lang['REGISTERED_USERS'] . ' ' . $users_list,
			'WWHLIGHT_DETAILS'	=> $this->obtain_users_string(),
			'WWHLIGHT_RECORD'	=> sprintf($this->user->lang['WWHLIGHT_RECORD'], $this->config['wwhlight_record'], $this->config['wwhlight_record_time']) . '<br />',
		));
	}
REPLACE WITH

Код: Выделить всё

	 public function index_modify_page_title()
	{
		$this->user->add_lang_ext('alg/wwhlight', 'wwhlight');
		$username_full = '';
		$users_list = '';
		$counter_users_reg = $counter_users_hidden = $counter_users_total = 0;

		if ($wwh_cache = $this->cache->get('_wwhlightdata_' . $this->user->lang_name . ($this->auth->acl_get('u_viewonline') ? '_h' : '_o')))
		{
			extract($wwh_cache);
		}
		else
		{
			$sql = "SELECT user_id, username, username_clean, user_colour, user_type, user_ip, user_lastvisit, user_allow_viewonline  " .
						" FROM  " . USERS_TABLE . 
							" WHERE user_type <>" . USER_IGNORE . 
							" AND user_lastvisit > UNIX_TIMESTAMP(CURDATE())" . 
							" ORDER BY user_lastvisit desc";
			$result = $this->db->sql_query($sql);
			while ($row = $this->db->sql_fetchrow($result))
			{
					$username_full = get_username_string(( 'full'), $row['user_id'], $row['username'], $row['user_colour']);
					$last_visit_time =  sprintf($this->user->lang['WWHLIGHT_LATEST'], $this->user->format_date($row['user_lastvisit'], 'H:i') );
					$hover_info = $last_visit_time ? ' title="' . $last_visit_time . '"' : '';
					if ($row['user_allow_viewonline'] )
					{
						$users_list .= $this->user->lang['COMMA_SEPARATOR'] . '<span' . $hover_info . '>' . $username_full . '</span>' ;
						$counter_users_reg++;
					}
					else
					{
						if ($this->auth->acl_get('u_viewonline'))
						{
							$users_list .= $this->user->lang['COMMA_SEPARATOR'] . '<em' . $hover_info . '>' .$username_full . '</em>' ;
						}
						$counter_users_hidden++;
					}
					$counter_users_total++;
			}
			$users_list = utf8_substr($users_list, utf8_strlen($this->user->lang['COMMA_SEPARATOR']));
			$vars = array('users_list', 'counter_users_reg', 'counter_users_hidden', 'counter_users_total');
			$this->cache->put('_wwhlightdata_' . $this->user->lang_name . ($this->auth->acl_get('u_viewonline') ? '_h' : '_o'), compact($vars), 360);
		}

		$this->counter_users_reg = $counter_users_reg;
		$this->counter_users_hidden = $counter_users_hidden;
		$this->counter_users_total = $counter_users_total;

		if ($users_list == '')
		{
			$users_list = $this->user->lang['NO_ONLINE_USERS'];
		}

		$this->template->assign_vars(array(
			'WWHLIGHT_LIST'		=> $this->user->lang['REGISTERED_USERS'] . ' ' . $users_list,
			'WWHLIGHT_DETAILS'	=> $this->obtain_users_string(),
			'WWHLIGHT_RECORD'	=> sprintf($this->user->lang['WWHLIGHT_RECORD'], $this->config['wwhlight_record'], $this->config['wwhlight_record_time']) . '<br />',
		));
	}
Изменение в условии WHERE user_lastvisit > UNIX_TIMESTAMP(CURDATE()), и добавление индекса по user_lastvisit (я не написал миграцию, добавил вручную) ускоряет выполнение запроса (больше не нужен полный перебор таблицы пользователей).
Всё повторяется. nurlan.info

Аватара пользователя
Алг
Former team member
Сообщения: 878
Зарегистрирован: 31.07.2012 23:11
Откуда: Израиль
Благодарил (а): 84 раза
Поблагодарили: 279 раз

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение Алг » 17.10.2016 0:06

nissin, спасибо, я дополню.
nissin писал(а): Изменение в условии WHERE user_lastvisit > UNIX_TIMESTAMP(CURDATE()), и добавление индекса по user_lastvisit (я не написал миграцию, добавил вручную) ускоряет выполнение запроса (больше не нужен полный перебор таблицы пользователей).
это обязательно надо
А насчёт кеширования, что будет означать для запроса? Если за все время активности юзера(жизни сессии) будет выдаваться кешированный результат, так это не устроит форум с активной посещаемостью

Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2181
Зарегистрирован: 16.12.2007 14:01
Откуда: Павлодар
Благодарил (а): 7 раз
Поблагодарили: 338 раз

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение nissin » 17.10.2016 8:28

От того что список пользователей, которые посетили форум, сформируется один раз в 10 минут, я думаю никакой проблемы не возникнет, а вот нагрузка на главную страницу спадёт. Я ставил подобное кэширование (10 минут) с оригинальным wwh на форуме с большой посещаемостью, жалоб не поступало. Если критично, то можно поставить минуту или две, но ставить кэширование нужно.
Всё повторяется. nurlan.info

Аватара пользователя
Perfecthus
phpBB 2.0.6
Сообщения: 518
Зарегистрирован: 21.10.2010 8:39
Откуда: Оттуда
Благодарил (а): 44 раза
Поблагодарили: 50 раз

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение Perfecthus » 09.02.2017 16:54

Алг, Так и что, расширение обновлено, кэширование добавлено?

Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 9765
Зарегистрирован: 08.08.2011 2:02
Благодарил (а): 175 раз
Поблагодарили: 2719 раз

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение Татьяна5 » 09.02.2017 17:30

Perfecthus, нет, так и висит мой PR с правками из темы - https://github.com/alg5/wwhlight/pull/3

Аватара пользователя
Anvar
Former team member
Сообщения: 1962
Зарегистрирован: 26.03.2010 9:09
Благодарил (а): 67 раз
Поблагодарили: 784 раза

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение Anvar » 19.02.2017 16:08

Эти правки для самой первой версии, они не совпадают с кодом в репо, так можно затереть все изменения и события которые были внесены позже.

Текущая версия из репозитория с изменениями.
wwh - Light, cache init.zip
(16.03 КБ) 125 скачиваний
Не пишите вопросы лично, если можете задать их на форуме!
Спецзаказы не интересуют!

поиск моих эксклюзивных решений

Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 9765
Зарегистрирован: 08.08.2011 2:02
Благодарил (а): 175 раз
Поблагодарили: 2719 раз

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение Татьяна5 » 20.02.2017 13:36

В pr правки адаптированы под ту версию. Только Алг их, похоже, не видит

Аватара пользователя
Anvar
Former team member
Сообщения: 1962
Зарегистрирован: 26.03.2010 9:09
Благодарил (а): 67 раз
Поблагодарили: 784 раза

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение Anvar » 20.02.2017 15:58

Точно, сразу не правильно понял гит. Смотрю красные удалённые $phpbb_dispstcher, а то что есть ещё зелёные не того))
Надо протестировать как будет работать с расширением для вывода аватар.

Я чуть иначе оформил кэширование, загнал туда массив данных $rowset, освободив лишь от запросов к бд, foreach продолжает работать как обычно, наверое это будет менее производительнее.
Не пишите вопросы лично, если можете задать их на форуме!
Спецзаказы не интересуют!

поиск моих эксклюзивных решений

aleksndr
phpBB 1.4.4
Сообщения: 133
Зарегистрирован: 23.02.2014 17:46
Благодарил (а): 2 раза

Re: [dev] Who Was Here Light - Кто сегодня был на форуме(облегченная версия)

Сообщение aleksndr » 17.03.2017 21:19

Подскажите,кому верить ?
be1830697c1c.jpg

Вернуться в «Анонсы и поддержка расширений для phpBB»