Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Условие от количества сообщений за неделю

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

Вроде такого:

<if test="$member['post_week'] > 10">

Контент отображается, если у данного пользователя есть 10 сообщений на форуме за неделю.

</if>

Рекомендованные сообщения

admin/applications/forums/modules_public/extras/stats.php

Найти 

		ksort($members);

Ниже добавить

		$ids = array();
		
		foreach( $members as $member )
		{
			$ids[] = $member['member_id'];
		}

		$weekStats = array();
		
		if ($ids)
		{
			$this->DB->build( array( 
									'select'	=> 'author_id, COUNT(*) as post_week',
									'from'		=> 'posts',
									'where'		=> "post_date > " . (time() - 604800) . " AND author_id IN(" . implode( ',', $ids ) . ")",
									'group'		=> "author_id",
							)		);
			
			$o = $this->DB->execute();
			
			while( $r = $this->DB->fetch($o) )
			{
				$weekStats[$r['author_id']] = $r['post_week'];
			}			
		}

		foreach( $members as $name => $member )
		{
			$members[$name]['post_week'] = isset($weekStats[$member['member_id']]) ? $weekStats[$member['member_id']] : 0;
		}

В шаблоне использовать $info['post_week']

  • Автор
8 часов назад, newbie сказал:

admin/applications/forums/modules_public/extras/stats.php

С таким фиксом, почему то показывает только у супермодераторов....

А у остальных что-то показывается?

  • Автор
1 час назад, newbie сказал:

А у остальных что-то показывается?

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

Изменил код. Пробуйте

  • Автор
6 часов назад, newbie сказал:

Изменил код. Пробуйте

Теперь всё нормально. Ещё раз благодарю за помощь.

  • Автор

Сделал такое же и для тем, внедрил код в шаблон userInfoPane

Всё нормально, но как всегда кроме одного - на каждого пользователя один запрос.

Тот хард-код подходит для тем? Если да, то в какой файл его прикрутить?

  • Автор
21.02.2020 в 14:25, Haktar сказал:

Тот хард-код подходит для тем? Если да, то в какой файл его прикрутить?

Не подскажите хард для топиков?

  • Автор
20.02.2020 в 10:21, newbie сказал:

Изменил код. Пробуйте

Можно ещё и аналогичный код для топиков? Пожалуйста!

23.02.2020 в 16:40, Haktar сказал:

Можно ещё и аналогичный код для топиков? Пожалуйста!

Там же почти то же самое.

Нашли код топиков -> Вытащили юзеров -> Получили данные (код выше) -> Добавили данные к юзерам.

  • Автор
4 часа назад, newbie сказал:

Нашли код топиков -> Вытащили юзеров -> Получили данные (код выше) -> Добавили данные к юзерам.

Если бы я хоть знал в какой файл добавлять и куда именно в этом файле.

Вы не знаете, какой шаблон отвечает за вывод темы? Не поверю.

topicViewTemplate

Нашли его в \admin\applications\forums\modules_public\forums\topics.php

		$template = $this->registry->output->getTemplate('topic')->topicViewTemplate( $this->forum, $this->topic, $post_data, $displayData );

$post_data содержит данные о постах, включая авторов.

Получаем ID'шники

Вместо 

		foreach( $members as $member )
		{
			$ids[] = $member['member_id'];
		}

Используем

		foreach( $post_data as $post )
		{
			if ( $post['author']['member_id'] )
			{
				$ids[$post['author']['member_id']] = $post['author']['member_id'];
			}
		}

Вместо 

		foreach( $members as $name => $member )
		{
			$members[$name]['post_week'] = isset($weekStats[$member['member_id']]) ? $weekStats[$member['member_id']] : 0;
		}

Используем

		foreach( $post_data as $pid => $post )
		{
			if ($post['author']['member_id'])
			{
				$post_data[$pid]['author']['post_week'] = isset($weekStats[$post['author']['member_id']]) ? $weekStats[$post['author']['member_id']] : 0;
			}
		}

В шаблоне userInfoPane используем

<if test="isset($author['post_week'])">{$author['post_week']}</if>

 

  • Автор
26.02.2020 в 13:24, newbie сказал:

Вы не знаете, какой шаблон отвечает за вывод темы? Не поверю.

topicViewTemplate

Так я про файл думал, не про шаблон.

 

26.02.2020 в 13:24, newbie сказал:

$post_data содержит данные о постах, включая авторов.

Получаем ID'шники

Вместо 

Спасибо. Я так понял что изменённую информацию вставлять в файл topics.php. А куда именно, ведь нужно же правильно разместить, иначе работать не будет.

  • Автор
12 минут назад, Haktar сказал:

Я так понял что изменённую информацию вставлять в файл topics.php. А куда именно, ведь нужно же правильно разместить, иначе работать не будет.

Всё нашёл. Добавить выше 

		$template = $this->registry->output->getTemplate('topic')->topicViewTemplate( $this->forum, $this->topic, $post_data, $displayData );

 

  • Автор

Такой ещё маленький вопросик - а как в коде указать что бы учитывались для подсчёта только сообщения где счётчик сообщений включён?

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.