Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Одмин

Статистика аттачей на главной странице

Recommended Posts

Подниму тему. Подскажите, а как вывести в статистике главной страницы кол-во залитых на форум аттачей? Не могу отыскать по ключу...

Share this post


Link to post
Share on other sites

Я думал, раз у вложений есть id, то и можно как-то вывести их статистику. Спасибо.

Share this post


Link to post
Share on other sites

У всех сущностей в бд есть id, на статистику он не влияет. Это уникальный идентификатор записи в таблице. Статистика вложений форумом не ведется, чтобы ее вывести нужно подсчитать количество строк в самой таблице - это +1 sql запрос.

  • Upvote 1

Share this post


Link to post
Share on other sites

Если интересен сам запрос:

 

Всего аттачей: {parse expression="( $row = $this->DB->buildAndFetch( array('select' => 'COUNT(*) as count', 'from' => 'attachments') ) ) ? $row['count'] : 0"}

При желание результат можно кешировать и обновлять раз в 30 минут, час.

 

<php>
if( $this->settings['show_totals'] )
{
if( ! isset( $stats['total_attachments'] ) OR $stats['update_attachments'] < ( IPS_UNIX_TIME_NOW - 1 * 60 * 60 ) )
{
	$row = $this->DB->buildAndFetch( array('select' => 'COUNT(*) as count', 'from' => 'attachments') );

	$stats['total_attachments'] = $row['count'];
	$this->caches['stats']['total_attachments']  = $stats['total_attachments'];
	$this->caches['stats']['update_attachments'] = IPS_UNIX_TIME_NOW;

	$this->cache->setCache( 'stats', $this->caches['stats'], array( 'array' => 1 ) );
}
}
</php>

Всего аттачей: {$stats['total_attachments']}

 

Шаблон Список форумов -> boardIndexTemplate

  • Upvote 1

Share this post


Link to post
Share on other sites

Решил задачу немного иначе.

В boardIndexTemplate сделал вот так:

 

<li class='clear'>
			<span
class='value'>{$this->caches['stats']['total_attachments']}</span>
			{$this->lang->words['total_attachments']}
		</li>

, предварительно в Языки добавив строку:

 

Приложение: Форумы
Набор слов: public_boards
Ключ: total_attachments
Текст по умолчанию: Аттачей

 

Вот только при прикреплении аттачей, порядковый номер 30000 с небольшим, а в статистике на главной 28212... странно... :huh:

Share this post


Link to post
Share on other sites
Вот только при прикреплении аттачей, порядковый номер 30000 с небольшим, а в статистике на главной 28212... странно...

Почитайте про автоинкремент.

Решил задачу немного иначе.

Я бы вообще перенес php в задачу, предварительно создав ее в планировщике. Дальше, если будет нужно, можно добавлять другие статистики.

  • Upvote 1

Share this post


Link to post
Share on other sites

Решил задачу немного иначе.

{$this->caches['stats']['total_attachments']}

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

Share this post


Link to post
Share on other sites

Ну я собственно так и понял.

Только вот остался один вопрос!

Создал я файл в /admin/applications/forums/tasks/total_attachments.php и создал задачу с подобным путём и представленным выше php-кодом в планировщике. Но задача не запускается. Сижу копаю, пытаюсь разобраться в чем дело. Может неправильный пишу ключ в задаче?

Edited by Одмин

Share this post


Link to post
Share on other sites

Ну я собственно так и понял.

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

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

  • Upvote 1

Share this post


Link to post
Share on other sites

@siv1987, о, теперь вроде всё работает! Сделал так:

 

<php>
if( $this->settings['show_totals'] )
{
   if( ! isset( $stats['total_attachments'] ) OR $stats['update_attachments'] < ( IPS_UNIX_TIME_NOW - 1 * 60 * 60 ) )
   {
       $row = $this->DB->buildAndFetch( array('select' => 'COUNT(*) as count', 'from' => 'attachments') );

       $stats['total_attachments'] = $row['count'];
       $this->caches['stats']['total_attachments']  = $stats['total_attachments'];
       $this->caches['stats']['update_attachments'] = IPS_UNIX_TIME_NOW;

       $this->cache->setCache( 'stats', $this->caches['stats'], array( 'array' => 1 ) );
   }
}
</php>
<li class='clear'>
			<span
class='value'>{$this->caches['stats']['total_attachments']}</span>
			{$this->lang->words['total_attachments']}
		</li>

Share this post


Link to post
Share on other sites

Создал я файл в /admin/applications/forums/tasks/total_attachments.php и создал задачу с подобным путём и представленным выше php-кодом в планировщике. Но задача не запускается. Сижу копаю, пытаюсь разобраться в чем дело. Может неправильный пишу ключ в задаче?

Если надумаете, то https://www.invisionpower.com/support/guides/_/advanced-and-developers/application/tasks-r202

  • Upvote 2

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...