Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Trotor

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

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

Ещё просьба.

Установил sql-запрос на страницу модераторов (шаблон group_strip) для отображения количества сообщений в неделю.

Однако на каждого модератора формирует свой запрос, можно ли оптимизировать это?

 

<php>$result = $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as post_week', 'from' => 'posts', 'where' => "author_id={$info['member_id']} AND post_date > " . (time() - 604800) ) );</php>

{$result['post_week']}

Поделиться сообщением


Ссылка на сообщение

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']

  • Like 1

Поделиться сообщением


Ссылка на сообщение
8 часов назад, newbie сказал:

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

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение
1 час назад, newbie сказал:

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

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

Поделиться сообщением


Ссылка на сообщение

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

  • Like 1

Поделиться сообщением


Ссылка на сообщение
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>

 

  • Like 2

Поделиться сообщением


Ссылка на сообщение
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 );

 

Поделиться сообщением


Ссылка на сообщение

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

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...