Уважаемые пользователи!
Напоминаем, что с 7 ноября 2020 года phpBB Group прекращает поддержку phpBB версии 3.2.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2020 года.
С учетом этого, а также того, что версия 3.2.x больше не будет получать обновлений, за исключением связанных с проблемами безопасности
(только при их наличии и только до 7 ноября 2020 года), рекомендуется обновить конференции до версии 3.3.x.

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

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 8 лет 10 месяцев
Откуда: Израиль
Благодарил (а): 85 раз
Поблагодарили: 305 раз

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

Сообщение Алг »

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

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

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

Т. Шаов
Аватара пользователя
igorbond
phpBB 3.0.11
Сообщения: 2823
Стаж: 9 лет 5 месяцев
Благодарил (а): 676 раз
Поблагодарили: 134 раза

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

Сообщение igorbond »

Не боты не нужны. Ну тогда спасибо
Изображение
belov29
phpBB 1.2.0
Сообщения: 11
Стаж: 5 лет 7 месяцев
Откуда: Анжеро судженск
Благодарил (а): 5 раз

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

Сообщение belov29 »

Алг, Спасибо за расширение, у меня почему то показывает пользователя что он был на форуме тогда, когда он разлогонится, а так если он не нажал кнопку выход но ушел с форума, не показывает что он был на форуме. Почему так выходит? форум у меня в подписи.
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 8 лет 10 месяцев
Откуда: Израиль
Благодарил (а): 85 раз
Поблагодарили: 305 раз

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

Сообщение Алг »

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

Т. Шаов
belov29
phpBB 1.2.0
Сообщения: 11
Стаж: 5 лет 7 месяцев
Откуда: Анжеро судженск
Благодарил (а): 5 раз

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

Сообщение belov29 »

Алг писал(а): В расширении есть пометка, что информация о пользователе обновляется один раз в час.
Это понятно, но у меня за целый день не обновляется, не то что за час!
belov29
phpBB 1.2.0
Сообщения: 11
Стаж: 5 лет 7 месяцев
Откуда: Анжеро судженск
Благодарил (а): 5 раз

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

Сообщение belov29 »

Вот за целый день ноль пользователей стоит, хотя уже много пользователей заходило. Если разлогонится то покажет что был сразу. Алг, Помогите, пожалуйста, почему у меня такая ошибка!
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 8 лет 10 месяцев
Откуда: Израиль
Благодарил (а): 85 раз
Поблагодарили: 305 раз

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

Сообщение Алг »

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

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

Т. Шаов
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2194
Стаж: 13 лет 6 месяцев
Откуда: Павлодар
Благодарил (а): 7 раз
Поблагодарили: 340 раз

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

Сообщение nissin »

Как выяснилось, что запрос не сильно лёгкий, ну и желательно сделать кэширование.
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
Сообщения: 933
Стаж: 8 лет 10 месяцев
Откуда: Израиль
Благодарил (а): 85 раз
Поблагодарили: 305 раз

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

Сообщение Алг »

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

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

Сообщение nissin »

От того что список пользователей, которые посетили форум, сформируется один раз в 10 минут, я думаю никакой проблемы не возникнет, а вот нагрузка на главную страницу спадёт. Я ставил подобное кэширование (10 минут) с оригинальным wwh на форуме с большой посещаемостью, жалоб не поступало. Если критично, то можно поставить минуту или две, но ставить кэширование нужно.
Всё повторяется. nurlan.info
Аватара пользователя
Perfecthus
phpBB 2.0.7a
Сообщения: 620
Стаж: 10 лет 8 месяцев
Откуда: Оттуда
Благодарил (а): 49 раз
Поблагодарили: 62 раза

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

Сообщение Perfecthus »

Алг, Так и что, расширение обновлено, кэширование добавлено?
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 10573
Стаж: 9 лет 10 месяцев
Благодарил (а): 184 раза
Поблагодарили: 2971 раз

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

Сообщение Татьяна5 »

Perfecthus, нет, так и висит мой PR с правками из темы - https://github.com/alg5/wwhlight/pull/3
Anvar
Former team member
Сообщения: 1965
Стаж: 11 лет 2 месяца
Благодарил (а): 67 раз
Поблагодарили: 790 раз

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

Сообщение Anvar »

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

Текущая версия из репозитория с изменениями.
wwh - Light, cache init.zip
(16.03 КБ) 184 скачивания
Не пишите вопросы лично, если можете задать их на форуме!
Спецзаказы не интересуют!
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 10573
Стаж: 9 лет 10 месяцев
Благодарил (а): 184 раза
Поблагодарили: 2971 раз

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

Сообщение Татьяна5 »

В pr правки адаптированы под ту версию. Только Алг их, похоже, не видит
Anvar
Former team member
Сообщения: 1965
Стаж: 11 лет 2 месяца
Благодарил (а): 67 раз
Поблагодарили: 790 раз

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

Сообщение Anvar »

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

Я чуть иначе оформил кэширование, загнал туда массив данных $rowset, освободив лишь от запросов к бд, foreach продолжает работать как обычно, наверое это будет менее производительнее.
Не пишите вопросы лично, если можете задать их на форуме!
Спецзаказы не интересуют!
aleksndr
phpBB 1.4.4
Сообщения: 159
Стаж: 7 лет 4 месяца
Благодарил (а): 2 раза

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

Сообщение aleksndr »

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

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