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

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

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

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

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


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

Статистика аттачей не введется.

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


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

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

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


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

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

  • Upvote 1

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


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

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

 

Всего аттачей: {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

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


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

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

В 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:

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


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

Может потому что удалял некоторые вложения?

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


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

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

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

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

  • Upvote 1

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


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

@newbie, хм, а ведь верно говорите. Благодарствую!

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


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

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

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

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

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


Ссылка на сообщение
11/18/15 15:12 (изменено)

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

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

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

Изменено пользователем Одмин

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


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

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

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

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

  • Upvote 1

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


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

@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>

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


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

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

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

  • Upvote 2

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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